簡體   English   中英

Excel VBA根據日期刪除行

[英]Excel VBA Deleting rows based upon date

我對此線程中的代碼有疑問

Excel VBA:刪除舊記錄

在那個線程中,這段代碼是

    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM