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
,而是抱怨Dim
variables。 虽然Dim
不是有效的variables名称,但它是一个有效的types成员名称。
@Shai Rado为您提供了类似Option Explicit
工作代码,在删除行时向后循环,当您的步骤为负时,需要从较高的数字循环到较低的数字,所以在此不再赘述。 这个答案只是解释了为什么你得到了错误。