【问题标题】:VBA - Outlook Not Removing AttachmentsVBA - Outlook 不删除附件
【发布时间】:2017-01-06 17:19:38
【问题描述】:

我正在编写一个应该删除附件的宏。从我的调试会话来看,它似乎应该可以工作。断点被命中,它识别出消息对象:

我知道这听起来有点傻,但奇怪的是,如果我设置断点并打开表达式/监视,它似乎可以工作,但否则就不行。

我已经为此苦苦挣扎了一段时间;如有任何指导,我将不胜感激。

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)

 Dim header As String
 Dim objNewMail As Outlook.MailItem
Dim Item As Object
Dim count As Integer


    Dim objInbox As Outlook.Folder
    Set objInbox = Outlook.Session.GetDefaultFolder(olFolderInbox)

    Dim entryIDs
    entryIDs = Split(EntryIDCollection, ",")
    Dim i As Integer

    For i = 0 To UBound(entryIDs)
        Set objNewMail = Application.Session.GetItemFromID(entryIDs(i))
                If objNewMail.Attachments.count > 0 Then
                    header = GetHeader(objNewMail)
                If DoesIPMatch(header) <> True Then
                   DeleteMessage (objNewMail)
                ElseIf IsAttachmentPDF(objNewMail) <> True Then
                     For count = 1 To objNewMail.Attachments.count
                       objNewMail.Attachments.Remove (count)
                    Next
                End If
            End If
    Next

End Sub

【问题讨论】:

  • 可能不是问题,但(count) 周围的括号是多余的。 objNewMail.Attachments.Remove count 应该足够了。 count 不需要按值进行评估和传递(这就是额外的括号所做的)......它已经是一个值。
  • 谢谢!我不是 VBA 人(更像是 C# gal),所以我非常感谢您的观察。

标签: vba outlook


【解决方案1】:

试试这个,如果您要从集合中删除项目,这很可能是罪魁祸首,它应该始终以相反的顺序完成,否则您必须重新索引您的计数器变量,这会导致代码混乱:

在您修改 objNewMail 项目后,可能还需要保存它(例如,通过删除附件)

For count = objNewMail.Attachments.count to 1 Step - 1
    objNewMail.Attachments.Remove count
Next
objNewMail.Save '## Not sure if this is necessary

或者:

With objNewMail.Attachments
    While .Count > 0
        .Remove 1
    Wend
End With
objNewMail.Save

【讨论】:

  • 哇,我不知道它是否删除了计数周围的 ()、反转循环的顺序或调用保存,但这有效。和我打了这么久,真心的谢谢你。
  • 可能是Save 修复了它。我看了你的截图,示例项目只有 1 个附件,所以在这种情况下排序不会受到影响,只有当有 2 个或更多附件时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
相关资源
最近更新 更多