Makro Post abholen, Posteingang nach Datum sortieren, oberste Mail markiern

  • Outlook

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Volker Bunge.

    Makro Post abholen, Posteingang nach Datum sortieren, oberste Mail markiern

    Hallo zusammen,

    für einen Freund von mir, mit einer Behinderung, möchte ich folgendes realisieren.

    Wenn er auf eine Schaltfläche drückt, soll folgendes passieren

    1. Abrufen der neusten e-Mails
    2. Wechseln in den Posteingang,
    3. Anzeige absteigend nach Datum sortieren
    4. Markieren der obersten sichtbaren e-Mail

    Punkt 2 habe ich schon gelöst. Für die anderen 3 Punkte habe ich leider nichts passenden gefunden.

    Beim sortieren (was ich bisher gefunden habe) geht es hauptsächlich um das "interne" sortieren. Dies hat aber keine Auswirkungen auf die Ansicht (Explorer-Ansicht auch genannt).

    Könntet Ihr mir hierfür mal ein paar Tipps geben, wo ich suchen kann/muss?

    Geht mein Vorhaben überhaupt?

    Vielen Dank

    Volker
    Hallo petaod,

    vielen Dank für die Lösung zu 1.

    Mein bisheriger Code sieht zur Zeit so aus.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Sub Post_abholen()
    2. Dim olApp As Outlook.Application
    3. Dim Mapi
    4. Dim InBox
    5. ' Neue Mails abrufen
    6. Application.Session.SyncObjects.Item(1).Start
    7. ' Auf die Outlook - Elemente zugreifen
    8. Set olApp = CreateObject("Outlook.Application")
    9. Set Mapi = olApp.GetNamespace("MAPI")
    10. ' Zeiger auf Posteingang setzten - Posteingang = Folder(6)
    11. Set InBox = Mapi.GetDefaultFolder(6)
    12. ' Wenn der aktuelle Ordner nicht der Posteingang ist, dann in diesen wechseln
    13. If ActiveExplorer.CurrentFolder <> Mapi.GetDefaultFolder(6) Then ' Zeiger auf Posteingang setzten - Posteingang = Folder(6)
    14. Set Application.ActiveExplorer.CurrentFolder = InBox
    15. End If
    16. ' E-Mails nach Datum absteigend sortieren
    17. ' Die erste Mail als aktive Mail ansteuern
    18. End Sub


    Die IF Abfrage kann man eigentlich auch weglassen. Aber vielleicht hilft es ja auch anderen, mit dieser kleinen Abfrage was anzufangen.

    So, die Hälfte ist geschafft. Hast Du für die anderen beiden auch noch eine Idee?

    Gruß
    Volker
    So, das markieren habe ich auch soweit gelöst. Nicht vielleicht schön, aber bisher genau das, was ich haben wollte.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Sub Post_abholen()
    2. Dim olApp As Outlook.Application
    3. Dim Mapi
    4. Dim InBox As Folder
    5. Dim oFolder As Folder
    6. Dim oItems As Items
    7. ' Neue Mails abrufen
    8. Application.Session.SyncObjects.Item(1).Start
    9. ' Auf die Outlook - Elemente zugreifen
    10. Set olApp = CreateObject("Outlook.Application")
    11. Set Mapi = olApp.GetNamespace("MAPI")
    12. ' Zeiger auf Posteingang setzten - Posteingang = Folder(6)
    13. Set InBox = Mapi.GetDefaultFolder(6)
    14. ' Wenn der aktuelle Ordner nicht der Posteingang ist, dann in diesen wechseln
    15. If ActiveExplorer.CurrentFolder <> Mapi.GetDefaultFolder(6) Then ' Zeiger auf Posteingang setzten - Posteingang = Folder(6)
    16. ' Wechselt in den Posteingang (somit es egal, wo man sich gerade befindet (Kalender, Kontake, Aufgaben oder e-Mail)
    17. Set Application.ActiveExplorer.CurrentFolder = InBox
    18. End If
    19. ' E-Mails nach Datum absteigend sortieren
    20. ' Set myitems = InBox.Items
    21. ' myitems.Sort "[ReceivedTime]", olAscending ' olAscending, olDescending oder olSortNone.
    22. ' Dieser auskommentierte Block funktioniert leider nicht richtig. Es wird nicht die jüngste Mail markiert
    23. ' ' Die erste Mail als aktive Mail ansteuern
    24. ' ActiveExplorer.ClearSelection
    25. ' 'Set oItems = InBox.Items
    26. ' ActiveExplorer.AddToSelection oItems(oItems.Count) ' 1 ist somit die älteste Mail
    27. ' Die erste Mail als aktive Mail ansteuern
    28. Dim AktMail As Integer ' Hier wird die lfd. ID hochgezählt
    29. Dim NeusteMail As Integer ' Hier steht am Ende die ID der jüngsten Mail drin
    30. Dim ErhAm As Date ' Erhält das formatierte Erhalten-Am-Datum der aktuellen e-Mail
    31. Dim neusteUhrzeit As Date ' Erhält die Uhrzeit der immer gerade jüngsten e-Mail
    32. Dim AktUhrzeit As Date ' Erhält die formatierte Erhalten-Am-Uhrzeit der aktuellen e-Mail
    33. ' Werte als Standard setzen
    34. AktMail = 0
    35. neusteUhrzeit = 0
    36. ' Erst einmal alle markierten Mail nicht mehr markieren
    37. ActiveExplorer.ClearSelection
    38. ' oItems beinhaltet jetzt die Mails aus dem Posteingang
    39. Set oItems = InBox.Items
    40. ' Durchläuft alle Mails
    41. For Each OutlookMail In InBox.Items
    42. ' Zählt die Anzahl der Mail
    43. AktMail = AktMail + 1
    44. ' Bei Lesebestätigungen gibt es warum auch immer, einen Fehler, daher werden diese hier gepfrüft
    45. If Mid(OutlookMail.Subject, 1, 8) <> "Gelesen:" And Mid(OutlookMail.Subject, 1, 16) <> "Lesebestätigung:" Then
    46. ' und nur die genommen, die keine Lesebestätigung sind
    47. ' Das Erhalten-Am-Datum wird richtig formatiert in eine Variable abgespeichert
    48. ErhAm = Format(CDate(OutlookMail.ReceivedTime), "dd.mm.yyyy")
    49. End If
    50. ' Jetzt noch prüfen, ob es eine e-Mail ist
    51. If TypeName(OutlookMail) = "MailItem" Then
    52. ' und dann, ob es am heutigen Tag gekommen ist
    53. If ErhAm >= Format(Now, "dd.mm.yyyy") And ErhAm <= Format(Now, "dd.mm.yyyy") Then
    54. ' Die aktuelle Uhr noch richtig formatiert merken
    55. AktUhrzeit = Format(CDate(OutlookMail.ReceivedTime), "hh:MM:ss")
    56. ' Jetzt prüfen, welche Nachricht die jüngste ist
    57. If AktUhrzeit > neusteUhrzeit Then
    58. ' Wenn es eine noch jüngere Mail gibt, dann diese für den nächsten Vergleich sich merken
    59. neusteUhrzeit = AktUhrzeit
    60. ' sowie die aktuelle Mail-ID
    61. NeusteMail = AktMail
    62. End If
    63. End If
    64. End If
    65. Next OutlookMail
    66. ' Erst einmal alle markierten Mail nicht mehr markieren
    67. ActiveExplorer.ClearSelection
    68. ' Die erste Mail als aktive Mail ansteuern
    69. ActiveExplorer.AddToSelection oItems(NeusteMail)
    70. End Sub


    Fehlt also nur noch das Sortieren bzw. aktualisieren der Anzeige

    Gruß
    Volker

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Volker Bunge“ ()