在使用 for 每个循环复制附件后,我一直尝试删除 Outlook 中的附件。它只是在复制后删除第一个附件,但不会处理第二个附件!它只是下降到 End Sub。
Private Sub Items_ItemAdd(ByVal item As Object)
On Error GoTo ErrorHandler
'Only act if it's a MailItem
Dim Msg As Outlook.MailItem
If TypeName(item) = "MailItem" Then
Set Msg = item
'Change variables to match need. Comment or delete any part unnecessary.
'If (Msg.SenderName = "Name Of Person") And _
'(Msg.Subject = "Subject to Find") And _
'(Msg.Attachments.Count >= 1) Then
'Set folder to save in.
Dim olDestFldr As Outlook.MAPIFolder
Dim myAttachments As Outlook.Attachments
Dim olAttch As Outlook.Attachment
Dim Att As String
'location to save in. Can be root drive or mapped network drive.
Const attPath As String = "C:\Users\pkshahbazi\Documents\EmailAttachments\"
Set myAttachments = Msg.Attachments
For Each olAttch In myAttachments
Att = olAttch.DisplayName
If Right(olAttch.FileName, 3) = "zip" Then
olAttch.SaveAsFile attPath & Att
olAttch.Delete
End If
Next olAttch
Msg.UnRead = False
End If
ProgramExit:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " - " & Err.Description
Resume ProgramExit
End Sub
我发现 OlAttch.delete 语句混淆了 For Each 循环。
知道如何删除附件。
在您上一个问题中,我们从索引循环更改为非索引循环,因为您没有任何.Delete
要求。不幸的是,从集合中删除项目需要索引迭代。
这是因为,当你有 3 件物品时:
- 项目 1 = 附件 1
- 项目 2 = 附件 2
- 第 3 项 = 附件 3
然后,当您删除第一个项目(项目 1/附件 1)时,它会将您带到项目 2,但是当删除发生时,您留下的集合如下所示:
所以你的循环将删除第 1 项和第 3 项,但永远不会触及第 2 项。
为您解决此问题的最简单方法是添加另一个循环来执行删除方法,而无需使用索引循环和重写脚本。
@Enderland 提供了这方面的例子。我不会重复他的努力,但我确实想向你解释一下发生了什么。从集合中删除项目时总是出现这种情况,您必须以相反的顺序逐步遍历集合。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)