如何让vba中的每个循环跳到下一个迭代?

如何让vba中的每个循环跳到下一个迭代?,vba,foreach,if-statement,Vba,Foreach,If Statement,我从excelexperts.com上得到了一个文件阅读器,它列出了文件夹中的文件(并且可以选择包含子文件夹)。我决定调整代码以跳过“Thumbs.db”文件 实际上,作为最后的手段,我已经让代码使用GoTo语句,但我知道这被认为是糟糕的编程,我想知道正确的代码是什么 Dim iRow Sub ListFiles() iRow = 11 Call ListMyFiles(Range("C7"), Range("C8")) End Sub Sub ListMyFiles(myS

我从excelexperts.com上得到了一个文件阅读器,它列出了文件夹中的文件(并且可以选择包含子文件夹)。我决定调整代码以跳过“Thumbs.db”文件

实际上,作为最后的手段,我已经让代码使用GoTo语句,但我知道这被认为是糟糕的编程,我想知道正确的代码是什么

Dim iRow

Sub ListFiles()
    iRow = 11
    Call ListMyFiles(Range("C7"), Range("C8"))
End Sub

Sub ListMyFiles(mySourcePath, IncludeSubfolders)
    Set MyObject = New Scripting.FileSystemObject
    Set mySource = MyObject.GetFolder(mySourcePath)
    On Error Resume Next
    For Each myFile In mySource.Files
        **If myFile.Name = "Thumbs.db" Then
            GoTo nextone
        Else**
            iCol = 2
            Cells(iRow, iCol).Value = myFile.Path
            iCol = iCol + 1
            Cells(iRow, iCol).Value = myFile.Name
            iCol = iCol + 1
            Cells(iRow, iCol).Value = myFile.Size
            iCol = iCol + 1
            Cells(iRow, iCol).Value = myFile.DateLastModified
            iRow = iRow + 1
        **End If**
**nextone:**
    Next
    If IncludeSubfolders Then
        For Each mySubFolder In mySource.SubFolders
            Call ListMyFiles(mySubFolder.Path, True)
        Next
    End If
End Sub
我添加的部分封装在双星中

在我之前的尝试中,我添加了以下代码:

If myFile.Name = "Thumbs.db" Then
    Next
Else
    rest of the code here
End If

但我得到了“下一个没有为”的错误。这就是为什么我选择了GoTo声明,我希望用更好的东西来代替它。

只要把你的If语句的逻辑改为:

For Each myFile In mySource.Files
    If myFile.Name <> "Thumbs.db" Then
        iCol = 2
        Cells(iRow, iCol).Value = myFile.Path
        iCol = iCol + 1
        Cells(iRow, iCol).Value = myFile.Name
        iCol = iCol + 1
        Cells(iRow, iCol).Value = myFile.Size
        iCol = iCol + 1
        Cells(iRow, iCol).Value = myFile.DateLastModified
        iRow = iRow + 1
    End If
Next

只需将If语句的逻辑更改为:

For Each myFile In mySource.Files
    If myFile.Name <> "Thumbs.db" Then
        iCol = 2
        Cells(iRow, iCol).Value = myFile.Path
        iCol = iCol + 1
        Cells(iRow, iCol).Value = myFile.Name
        iCol = iCol + 1
        Cells(iRow, iCol).Value = myFile.Size
        iCol = iCol + 1
        Cells(iRow, iCol).Value = myFile.DateLastModified
        iRow = iRow + 1
    End If
Next

只需删除以下行:
GoTo-nextone
&
nextone:
,它就可以正常工作了。。。您也可以用这种方式更改
if语句:
如果myFile.Name“Thumbs.db”,则
但也删除
Else
行。
如果myFile.Name“Thumbs.db”,则
使它更简单、更整洁。谢谢只需删除以下行:
GoTo-nextone
&
nextone:
,它就可以正常工作了。。。您也可以用这种方式更改
if语句:
如果myFile.Name“Thumbs.db”,则
但也删除
Else
行。
如果myFile.Name“Thumbs.db”,则
使它更简单、更整洁。谢谢谢谢你的回答。第一部分工作完美无瑕,代码的第二部分帮助我准备是否需要删除列表中的其他文件。我会投你一票,但我还没有所需的代表。谢谢你的回答。第一部分工作完美无瑕,代码的第二部分帮助我准备是否需要删除列表中的其他文件。我会投你一票,但我还没有必要的代表。