Excel VBA根据日期删除行

时间:2017-03-30 13:09:45

标签: excel vba excel-vba date delete-row

我对此帖子中的代码有疑问

Excel VBA: Delete Old Records

在那个帖子中,是这段代码

doOnComplete

我遇到的问题是,当我运行此代码时,收到以下错误:

编译错误:类型块外的语句无效

第一次看,Dim看起来不正确,因为它被列为Dimi,我找不到使用类似的东西对VBA的引用。我将它改为Dim,它仍然给出了错误。在我研究过的所有内容中,这段代码似乎都是正确的,但我正在摸索打嗝的位置。任何人都知道它在哪里侧身?

由于

2 个答案:

答案 0 :(得分:2)

尝试下面的代码,即使有1000行,它也会在不到2秒的时间内运行(因为你转向Application.ScreenUpdating = False

<强>代码

Option Explicit

Sub ClearOldData()

    Application.ScreenUpdating = False
    Dim i As Long
    Dim LastRow As Long

    With Sheets("Data")
        LastRow = .Cells(.Rows.Count, "F").End(xlUp).Row ' <-- get last row with data from column F

        For i = LastRow To 2 Step -1 ' always loop backwards when deleting cells/ranges/rows
            If DateDiff("d", .Range("F" & i).Value, Date) > 179 Then ' older than 179 days
                .Rows(i).Delete
            End If
        Next i
    End With
    Application.ScreenUpdating = True

End Sub

答案 1 :(得分:0)

Dimi As Long

无论是谁写的都是为了写Dim i As Long。如果你写一个Type语句,它看起来像这样

Public Type MyType
    TypeID As Long
    TypeName As String
End Type

如果没有Type关键字,请查看Dim块中的这些语句如何看起来像变量声明?这就是你得到的错误信息的本质。编译器看到变量Dimi和没有Dim关键字的变量声明,并抱怨您没有Type语句的类型成员声明。

如果将其更改为Dim As Long,则会收到相同的错误,但是编译器抱怨变量Dimi而不是抱怨变量Dim。虽然Dim不是有效的变量名,但它是有效的类型成员名。

@Shai Rado为您提供Option Explicit之类的代码,当您删除行时向后循环,以及当您的步数为负数时需要从较高的数字循环到较低的数字,所以我赢了不要在这里重复一遍。这个答案只是解释了为什么你得到了错误。