【发布时间】:2017-12-13 22:26:29
【问题描述】:
我正在尝试遍历邮箱中的所有电子邮件并从中提取附件。如果我没有包含删除,则循环按预期工作。包含删除它适用于第一封电子邮件,并且在“下一个”语句中退出 for 循环,跳过剩余的电子邮件。我可以将删除分离到一个新循环中,但这似乎效率低下。
For Each itm In Inbox.Items
For Each objAtt In itm.Attachments
sEmailDate = Format(itm.ReceivedTime, "dd/mm/yyyy")
sDataDate = Format(DateAdd("d", -1, CDate(sEmailDate)), "dd/mm/yyyy")
sFileName = objAtt.Filename
sSubject = itm.Subject
'Check if the report was sent today
If sEmailDate = sTodayDate And sFileName = "Report.csv" Then
bToday = True
End If
'Look for Report file
If sFileName = "Report.csv" Then
'Save it to the save folder, as the DisplayName. This will overwrite previously saved copies of this file
objAtt.SaveAsFile saveFolder & "\" & "report" & sSubject & "_" & Format(sDataDate, "yyyymmdd") & ".csv"
If Err.Number = 0 Then
itm.Delete 'without this istwill loop correctly
iReportCount = iReportCount + 1
Else
GoTo ExitLoop
End If
End If
Next objAtt
Next itm
【问题讨论】:
-
所以试试
For i = itm.Count to 1 Step -1而不是For Each itm In Inbox.Items。在将itm定义为Inbox.Items之后。我不确定语法是否正确,但For Each-Loop 和 Delete 的问题是,它会删除项目,因此它们会移动并且无法正确跟踪项目。这就是为什么你需要倒退。