For Each Loop over folders that moves folders skipping some folders
For Each Loop over folders that moves folders is skipping some folders
我正在尝试遍历 Outlook 中子文件夹中的所有文件夹,以查看字符串是否在 Excel sheet.
中
循环跳过了一些文件夹,所以我必须重新运行宏。调试时循环跳过测试用例中的三个项目。
Dim outlookFolder As Variant
Dim numOutlookFolders As Integer: numOutlookFolders = 0
Debug.Print POFolder.Folders.Count
For Each outlookFolder In POFolder.Folders
Found = False
For Each PO In tbl.ListColumns(1).DataBodyRange.SpecialCells(xlCellTypeVisible)
If InStr(outlookFolder.Name, PO) Then
Found = True
'Exit For
End If
Next PO
If Found = False Then
If InStr(outlookFolder.Name, "PO") Then
outlookFolder.MoveTo CompletedFolder
Dim folderName As String: folderName = outlookFolder.Name
fileStream.WriteLine folderName
Count = Count + 1
End If
End If
numOutlookFolders = numOutlookFolders + 1
Next outlookFolder
Debug.Print numOutlookFolders
调试Window输出:
49
46
要确保循环是否正常工作,您需要删除其中的所有代码:
Dim outlookFolder As Variant
Dim numOutlookFolders As Integer: numOutlookFolders = 0
Debug.Print POFolder.Folders.Count
For Each outlookFolder In POFolder.Folders
numOutlookFolders = numOutlookFolders + 1
Next outlookFolder
Debug.Print numOutlookFolders
如果您在输出中得到相同的数字,您可以开始逐行添加代码,这样您将能够了解是哪一行代码导致了问题。
如果您在输出中没有得到相同的数字,您可以尝试找出导致问题的确切文件夹。
您不应将 for each
用于更改正在迭代的集合(通过调用 outlookFolder.Move
)的循环。
使用向下 for
循环(从倒数到 1)。
我正在尝试遍历 Outlook 中子文件夹中的所有文件夹,以查看字符串是否在 Excel sheet.
中循环跳过了一些文件夹,所以我必须重新运行宏。调试时循环跳过测试用例中的三个项目。
Dim outlookFolder As Variant
Dim numOutlookFolders As Integer: numOutlookFolders = 0
Debug.Print POFolder.Folders.Count
For Each outlookFolder In POFolder.Folders
Found = False
For Each PO In tbl.ListColumns(1).DataBodyRange.SpecialCells(xlCellTypeVisible)
If InStr(outlookFolder.Name, PO) Then
Found = True
'Exit For
End If
Next PO
If Found = False Then
If InStr(outlookFolder.Name, "PO") Then
outlookFolder.MoveTo CompletedFolder
Dim folderName As String: folderName = outlookFolder.Name
fileStream.WriteLine folderName
Count = Count + 1
End If
End If
numOutlookFolders = numOutlookFolders + 1
Next outlookFolder
Debug.Print numOutlookFolders
调试Window输出:
49
46
要确保循环是否正常工作,您需要删除其中的所有代码:
Dim outlookFolder As Variant
Dim numOutlookFolders As Integer: numOutlookFolders = 0
Debug.Print POFolder.Folders.Count
For Each outlookFolder In POFolder.Folders
numOutlookFolders = numOutlookFolders + 1
Next outlookFolder
Debug.Print numOutlookFolders
如果您在输出中得到相同的数字,您可以开始逐行添加代码,这样您将能够了解是哪一行代码导致了问题。
如果您在输出中没有得到相同的数字,您可以尝试找出导致问题的确切文件夹。
您不应将 for each
用于更改正在迭代的集合(通过调用 outlookFolder.Move
)的循环。
使用向下 for
循环(从倒数到 1)。