代码之家  ›  专栏  ›  技术社区  ›  MichaelE

删除所有已删除的邮件(包括提醒)

  •  0
  • MichaelE  · 技术社区  · 1 年前

    我有很多警报,最近发现当它们被删除时,它们只适用于已删除的项目并导致问题,所以我试图用宏删除警报。

    Public Sub ClearDeleted()
        Dim olNS As NameSpace
        Dim deletedFolder As Outlook.MAPIFolder
        Set olNS = Outlook.Application.GetNamespace("MAPI")
        Set deletedFolder = olNS.GetDefaultFolder(olFolderDeletedItems)
        
        myCount = deletedFolder.Items.Count
        For ii = 1 To myCount Step 1
            Debug.Print ii & " " & deltedFolder.Items(ii)
        Next ii
    End Sub
    

    我不是在这里删除,而是打印主题名称,它适用于常规电子邮件,但如果收到提醒,它会失败,因为Object不支持此属性或方法。

    我发现,如果我只关注约会并添加。

    Dim objAppointment As Outlook.AppointmentItem
    'In the loop:
    Set objAppointment = deletedFolder.Items.Item(ii)
    Debug.Print ii & " " & objAppointment.Subject
    

    这只适用于警报,但当它到达常规电子邮件时,由于类型不匹配而失败。

    如何让一个宏同时处理电子邮件和警报?非常感谢。

    1 回复  |  直到 1 年前
        1
  •  1
  •   Dmitry Streblechenko    1 年前

    而不是

    Dim objAppointment As Outlook.AppointmentItem
    

    使用

    Dim objAppointment As Object
    

    并检查 Class 属性将其标识为约会 26 (OlObjectClass.olAppointment) :

    if objAppointment.Class = 26 Then
      ...
    

    您还需要向后循环,否则在循环时会减少集合计数:

    dim Items As Object
    dim Items as Items
    set Items = deletedFolder.Items
    myCount = Items.Count
    For ii = myCount to 1 Step -1
      set Item = Items(ii)
      if Item.Class = 26 Then
        Item.Delete
      End If
    next ii