Excel VBA根据date删除行

我有一个关于这个线程中的代码的问题

Excel VBA:删除旧logging

在这个线程中,是这个代码

Sub ClearOldData() Application.ScreenUpdating = False Dimi As Long With Sheets("Data") For i = 2 To LastRow Step -1 If Int(Date - Cells(i, "F").Value) > 179 Then .Rows(i).Delete End If Next i End With Application.ScreenUpdating = True End Sub 

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

编译错误:语句无效外部types块

在第一次查看时,Dim看起来是不正确的,因为它被列为Dimi,我不能使用类似的东西findVBA的引用。 我改变它昏暗,它仍然给出了错误。 这个代码似乎在我所研究的所有方面都是正确的,但是我正在摸索着打嗝的地方。 任何人都有一个想法,在哪里横向?

谢谢

尝试下面的代码,即使有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 
 Dimi As Long 

谁写的意思是写Dim i As Long 。 如果你写一个Type语句,它看起来像这样

 Public Type MyType TypeID As Long TypeName As String End Type 

查看Type块中的那些语句如何看起来像没有Dim关键字的variables声明? 这是你得到的错误信息的性质。 编译器会看到variablesDimi的variables声明,并且没有Dim关键字,并且抱怨说您没有Type语句的types成员声明。

如果将其更改为“ Dim As Long则会得到相同的错误,但不是编译器抱怨variablesDimi ,而是抱怨Dimvariables。 虽然Dim不是有效的variables名称,但它是一个有效的types成员名称。

@Shai Rado为您提供了类似Option Explicit工作代码,在删除行时向后循环,当您的步骤为负时,需要从较高的数字循环到较低的数字,所以在此不再赘述。 这个答案只是解释了为什么你得到了错误。