[英]Excel VBA Deleting rows based upon date
我對此線程中的代碼有疑問
在那個線程中,這段代碼是
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
我遇到的問題是,當我運行此代碼時,收到以下錯誤:
編譯錯誤:語句在類型塊外無效
乍看之下,Dim看起來是不正確的,因為它被列為Dimi,並且我找不到使用該名稱的對VBA的引用。 我將其更改為Dim,但仍然給出錯誤。 在我對此進行的所有研究中,這段代碼似乎都是正確的,但是我一直在打over。 任何人都知道它會在什么地方橫盤整理嗎?
謝謝
嘗試下面的代碼,即使有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
看看沒有Dim
關鍵字的Type
塊中的那些語句如何看起來像變量聲明? 這就是您收到的錯誤消息的本質。 編譯器看到變量Dimi
的變量聲明,沒有Dim
關鍵字,並且抱怨您有沒有Type
語句的類型成員聲明。
如果將其更改為Dim As Long
則會得到相同的錯誤,但是編譯器不是在抱怨變量Dimi
,而是在抱怨變量Dim
。 雖然Dim
不是有效的變量名稱,但它是有效的類型成員名稱。
@Shai Rado為您提供了具有Option Explicit
類的工作代碼,在刪除行時向后循環,並且在步驟為負數時要求從較高的數字循環到較低的數字,因此在此不再贅述。 該答案僅說明了您為什么出錯了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.