我对此帖子中的代码有疑问
在那个帖子中,是这段代码
doOnComplete
我遇到的问题是,当我运行此代码时,收到以下错误:
编译错误:类型块外的语句无效
第一次看,Dim看起来不正确,因为它被列为Dimi,我找不到使用类似的东西对VBA的引用。我将它改为Dim,它仍然给出了错误。在我研究过的所有内容中,这段代码似乎都是正确的,但我正在摸索打嗝的位置。任何人都知道它在哪里侧身?
由于
答案 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
之类的代码,当您删除行时向后循环,以及当您的步数为负数时需要从较高的数字循环到较低的数字,所以我赢了不要在这里重复一遍。这个答案只是解释了为什么你得到了错误。