用于循环删除行

Gra*_*ler 3 excel vba for-loop excel-vba

我正在使用一个宏列出我选择的任何目录中的所有文件名.我正在编写代码,将文件名拆分为以后可以使用的块.文件名列表从单元格F6开始,沿列向下运行.这是我到目前为止编写的代码:

Dim ContractNum As String
Dim InvNum As String
Dim FileRng As Range
Dim FileLastRow As Long
Dim File As Range

FileLastRow = Sheet1.Range("F" & Rows.Count).End(xlUp).Row

Set FileRng = Sheet1.Range("F6:F" & FileLastRow).SpecialCells(xlCellTypeConstants, 23)

For Each File In FileRng
If File = "Invoice.zip" Or File = "Thumbs.db" Then
    File.EntireRow.Delete
End If
Next File


For Each File In FileRng
    ContractNum = Left(File, 4)
    InvNum = Mid(File, 8, 6)
    File.Offset(0, -5) = ContractNum
    File.Offset(0, -4) = InvNum
Next File
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经完成了那部分工作.我遇到的问题是,在所有使用此宏的目录中都有不需要的文件,例如"Thumbs.db"或"Invoice.zip".我遇到问题的代码如下:

For Each File In FileRng
If File = "Invoice.zip" Or File = "Thumbs.db" Then
    File.EntireRow.Delete
End If
Next File
Run Code Online (Sandbox Code Playgroud)

我想要做的是扫描整个文件名列表,如果遇到文件名"Thumbs.db"或"Invoice.zip",删除整行.到目前为止,这工作......有点儿.例如,如果我的列表中有两个名为"Thumbs.db"和"Invoice.zip"的文件,我必须运行两次以删除它们.显然,我想一下子把它们全部擦掉.

Sco*_*ner 5

根据我的评论,将for循环更改为:

For i = filelastrow to 6 step -1
   If Sheet1.Cells(i,6) = "Invoice.zip" Or Sheet1.Cells(i,6)  = "Thumbs.db" Then
        Sheet1.row(i).Delete
   End If
Next File
Run Code Online (Sandbox Code Playgroud)

问题是,当一行被删除时,下面的一行成为该行,然后循环在它移动到下一行时跳过它.然后它也将在末尾移动空行.

通过倒退,这​​个问题就消除了.