bestimmte Emails löschen

  • Outlook

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von INOPIAE.

    bestimmte Emails löschen

    ausgelagert aus Emails im ausgewählten Ordner bis zu einem bestimmten Zeitpunkt komplett löschen ~VaporiZed

    Hey Leute, ich hoffe ihr könnt mir helfen.
    Ich verwende nahezu den gleichen Code

    Visual Basic-Quellcode

    1. Sub iDeleteEmails()
    2. Dim Ordner As Outlook.Folder
    3. Dim Ordnerloeschen As Outlook.Folder
    4. Dim Email As Outlook.MailItem
    5. Dim Objektloeschen As Outlook.MailItem
    6. Dim Datum As Date
    7. With UserForm1.Label1
    8. .Caption = "Bitte gib das Datum ein, bis zu dem du deine Emails löschen willst. Emails mit genau diesem Datum werden ebenfalls gelöscht."
    9. End With
    10. UserForm1.Show
    11. Load UserForm1
    12. With UserForm1.TextBox1
    13. If IsDate(.Text) Then
    14. .Text = CDate(.Text)
    15. Else
    16. MsgBox "Eingabe nicht korrekt!"
    17. Exit Sub
    18. End If
    19. End With
    20. With UserForm1
    21. Datum = CDate(UserForm1.TextBox1)
    22. Unload UserForm1
    23. End With
    24. On Error Resume Next
    25. Set Ordner = Application.Session.PickFolder
    26. For Each Email In Ordner.Items
    27. With Email
    28. If .ReceivedTime() < Datum Then
    29. .Delete
    30. End If
    31. End With
    32. Next Email
    33. Set Ordnerloeschen = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderDeletedItems)
    34. For Each Objektloeschen In Ordnerloeschen.Items
    35. With Objektloeschen
    36. .Delete
    37. End With
    38. Next Objektloeschen
    39. End Sub


    Der Code für die UserForm Zeile 10 bis 29 dient einfach nur dazu, dem User zu ermöglichen, ein Datum in eine Textbox einzugeben, die dann in der Variablen Datum gespeichert wird.

    Als Datum gebe ich den 31.12.2021 ein. Das Datum wird korrekt gespeichert (per debug.print getestet)
    Als Ordner wähle ich den Ordner "Test" aus. Auch dieser wird korrekt gespeicher.

    Im Order Test befinden sich 2 Emails aus 2017 und 2020.

    Leider steigt das Makro bei For Each (Zeile 33) Email In Ordner.Items aus und behandelt den With Email Block garnicht erst, sprint also direkt zu Zeile 41.

    Das würde es aber doch nur tun, wenn die Emails nicht vorhanden wären, òder?

    Danke im Voraus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Welcher Fehler kommt denn, wenn Du das On Error Resume Next rausnimmst? Eine derartige Fehlerbehandlung sollte nämlich erst dann eingebaut werden, wenn es nicht anders geht. Aber solange Du nicht weißt, was für Fehler auftauchen können und wie man diese ggf. im Voraus verhindert, wäre es Schuss ins eigene Knie, zu diesem Zeitpunkt On Error Resume Next aktiviert zu lassen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    BuddyHoli schrieb:

    For Each Email In Ordner.Items

    Bist Du hier sicher das alle Elemente E-Mails sind?

    Schau Dir mal diesen Code an:

    Visual Basic-Quellcode

    1. Dim itm As Object
    2. For Each itm In Ordner .Items
    3. Select Case TypeName(itm)
    4. Case "MailItem"
    5. If itm.ReceivedTime< #8/11/2023# Then
    6. itm.delete
    7. End If
    8. End Select
    9. Next
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).