Vba 通过规则删除附件的Outlook脚本
我对VBA和这个论坛都是新手。首先让我说,我花了相当多的时间试图通过做和搜索来找到我的答案 我需要创建一个脚本,我可以添加到我的规则删除附件从某些电子邮件。我找到了这个代码,并认为它会有所帮助Vba 通过规则删除附件的Outlook脚本,vba,outlook,outlook-2010,Vba,Outlook,Outlook 2010,我对VBA和这个论坛都是新手。首先让我说,我花了相当多的时间试图通过做和搜索来找到我的答案 我需要创建一个脚本,我可以添加到我的规则删除附件从某些电子邮件。我找到了这个代码,并认为它会有所帮助 Public Sub deleteAttach(itm As Outlook.MailItem) Dim objAtt As Outlook.Attachment Set objAtt = itm.Attachments objAtt.itm(1).Delete End Sub 现在我似乎无法让这段
Public Sub deleteAttach(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Set objAtt = itm.Attachments
objAtt.itm(1).Delete
End Sub
现在我似乎无法让这段代码正常工作。阅读了相关内容后,我意识到itm需要是一个对象,但不知何故,如果我使用Public Sub deleteAttach(ByVal项作为对象)
规则找不到我的脚本
我还尝试将代码更改为objATT.Delete
任何帮助都将不胜感激。多谢各位 您确定它缺少子例程吗?当数组从索引0开始时,它被设置为第2项
Public Sub deleteAttach(itm As Outlook.MailItem)
'Dim objAtt As Outlook.Attachment
'Set objAtt = itm.Attachments 'AttachmentS collection
'objAtt.itm(0).Delete 'note the 0 starts the indexing
'or
'for each att in objAtt
' att.Delete
'next
For j = itm.Attachments.Count To 1 Step -1
itm.Attachments.Remove (j)
Next j
itm.Save 'Save the mail item without attachments
End Sub
您的代码从未读取项目的已删除附件。您拔下附件,但忘记再次“设置”
此外,您需要在代码顶部使用选项Explicit
Public Sub deleteAttach(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Set objAtt = itm.Attachments 'this creates a "new" attachment you then delete from
objAtt.itm(1).Delete 'This line makes no sense if you think about it
End Sub
请尝试以下操作:
Public Sub deleteAttach(itm As Outlook.MailItem)
itm.Attachments(1).Delete
itm.Save
End Sub
如果您没有在以编程方式修改电子邮件后进行“保存”的习惯,您将遇到类似的模糊Outlook问题
或者,如果要删除所有附件,可以向后遍历列表:
Public Sub deleteAttach(itm As Outlook.MailItem)
dim i as integer
for i = ubound(itm.Attachments) to lbound(itm.Attachments)
itm.Attachments(i).Delete
next i
itm.Save
End Sub
打开您认为规则应该处理的项目并运行deleteAttach\u测试
Private Sub deleteAttach_test()
Dim currItem As mailitem
Set currItem = ActiveInspector.currentItem
deleteAttach currItem
End Sub
Public Sub deleteAttach(itm As Outlook.mailitem)
' There is only one attachment in the mail
itm.Attachments(1).Delete
itm.Save
End Sub
回复:“规则找不到我的脚本。”
在规则中添加“RunAScript”时选择脚本。如果邮件是调用规则的邮件,则必须运行代码
如果可以有多个附件:
Private Sub deleteAttach_V1_test()
Dim currItem As mailitem
Set currItem = ActiveInspector.currentItem
deleteAttach_V1 currItem
End Sub
Public Sub deleteAttach_V1(itm As Outlook.mailitem)
Dim j As Long
' Delete in reverse, the highest numbered remaining item each time
For j = itm.Attachments.count To 1 Step -1
itm.Attachments(j).Delete
Next j
itm.Save
End Sub
Private Sub deleteAttach_V2_test()
Dim currItem As mailitem
Set currItem = ActiveInspector.currentItem
deleteAttach_V2 currItem
End Sub
Public Sub deleteAttach_V2(itm As Outlook.mailitem)
Dim i As Long
For i = 1 To itm.Attachments.count
' Delete the new first item each time
itm.Attachments(1).Delete
Next i
itm.Save
End Sub
当我运行上述coed时,我得到以下错误:运行时错误'13'类型不匹配。这就是调试器显示错误的地方:Set objAtt=itm.AttachmentsAh,我看到问题了。这是一个集合,而不是一个单独的附件。我做了一些编辑,现在就试试。谢谢你的帮助,代码现在可以正常工作,但不会删除附件。我只有一个附件在电子邮件中,我正在测试它。有什么线索吗?在这种情况下,我们需要通过添加itm.save before End Sub来保存它。仍然没有运气,附件仍然没有被删除。我在另一台机器上试过了。还尝试使用MsgBox,只是为了检查代码是否已保存,但附件仍然存在..您好,谢谢帮助。当我试图运行代码以除去所有附件时,我得到的错误是:编译错误:UBound上的类型不匹配。另外,在您提供的第一个代码中,它不会删除附件。还有什么建议吗?请注意,为了让Outlook识别您的脚本作为规则的一部分运行,它必须包含Outlook.MailItem或Outlook.MeetingItem类型的参数。更多关于这个。如果您发现下面的解决方案有效,请将其标记为正确答案,以帮助他人。