Vba 通过规则删除附件的Outlook脚本

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 现在我似乎无法让这段

我对VBA和这个论坛都是新手。首先让我说,我花了相当多的时间试图通过做和搜索来找到我的答案

我需要创建一个脚本,我可以添加到我的规则删除附件从某些电子邮件。我找到了这个代码,并认为它会有所帮助

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类型的参数。更多关于这个。如果您发现下面的解决方案有效,请将其标记为正确答案,以帮助他人。