hellas
Goto Top

Mit Excel VBA Outlook Posteingang nach Kennzeichnungsstatus auslesen

Hallo,

ich möchte gerne in einer Excel Liste alle Emails aus meinem Posteingang haben, die zur Nachverfolgung gekennzeichnet sind.

Mein Ansatz ist folgender:

Sub EmailRead()
Set olApp = CreateObject("outlook.application")
Set objfolder = olApp.GetNamespace("MAPI").GetDefaultFolder(6) ' 6 = olFolderInbox

Sheets("Tabelle1").Select
With ActiveSheet.UsedRange
.Value = Empty
End With

For a = 1 To objfolder.items.Count
If objfolder.items(a).unread = True Then '---- nur ungelesene

Cells(Cells(Rows.Count, "A").End(xlUp).Row + 1, 1).Value = objfolder.items(a).Subject

End If
Next a

Set objnSpace = Nothing
End Sub

Hier werden nun die Betreff Zeilen aller ungelesenen Nachrichten aufgelistet.
Ich habe aber noch keine Idee wie ich alle bekomme, die ein Nachverfolgungs-Flag gesetzt haben.

Kann mir da jemand helfen ?

Danke

Content-ID: 262936

Url: https://administrator.de/contentid/262936

Ausgedruckt am: 25.11.2024 um 16:11 Uhr

colinardo
colinardo 10.02.2015 aktualisiert um 14:52:40 Uhr
Goto Top
Hallo Hellas,
kein Problem machst du effektiver und schneller mit einem Restrict-Filter auf den Posteingang, dann müssen nicht alle Mails einzeln geprüft werden face-wink
Da du nicht weiter spezifiziert hast ob die Mails gleichzeitig Ungelesen und geflaggt sein müssen bin ich mal davon ausgegangen das sie beides haben müssen.
Ist das nicht der Fall kannst du das in Zeile 12 durch ändern des AND in ein OR abändern, dann werden sowohl ungelesene oder geflaggte Nachrichten übernommen.
Sub EmailRead()
    Dim olApp as Object, objFolder as Object, mail as Object, rngCurrent as Range
    Set olApp = CreateObject("outlook.application")  
    Set objFolder = olApp.GetNamespace("MAPI").GetDefaultFolder(6) ' 6 = olFolderInbox  
    
    With Sheets("Tabelle1")  
        'Sheetinhalt löschen  
        .UsedRange.Clear
        'Startausgabezelle setzen  
        Set rngCurrent = .Range("A1")  
        ' Mails auf ungelesene und gleichzeitig geflaggte beschränken  
        For Each mail In objFolder.Items.Restrict("[Unread] = True AND [FlagRequest] = 'Zur Nachverfolgung'")  
            rngCurrent.Value = mail.Subject
            ' Ausgabe eine Zeile nach unten verschieben  
            Set rngCurrent = rngCurrent.Offset(1, 0)
        Next
    End With
    Set olApp = Nothing
    Set objFolder = Nothing
End Sub
Grüße Uwe
hellas
hellas 10.02.2015 um 14:59:10 Uhr
Goto Top
Danke Uwe !

Es geht.... und auch wesentlich schneller als meine Lösung face-smile

Hab ich auch die Möglichkeit die Art der Kennzeichnung abzufragen ("Blaue Kennzeichnung", "Rote Kennzeichnung", "Als erledigt kennzeichnen") ?
colinardo
colinardo 10.02.2015 aktualisiert um 15:19:00 Uhr
Goto Top
Zitat von @hellas:
Hab ich auch die Möglichkeit die Art der Kennzeichnung abzufragen ("Blaue Kennzeichnung", "Rote
Kennzeichnung", "Als erledigt kennzeichnen") ?
Du meinst die Kategorisierung ? Das ist ja was anderes als die Kennzeichnung.
Die Kategorie kann man in dem Restrict Filter leider nicht verwenden, aber du kannst den Filter so einstellen das erst mal gröber gefiltert wird und du dann zusätzlich mit einer IF-Abfrage die Kategorie überprüfst:
if Instr(1,mail.Categories,"Blaue Kategorie",1) then  
    '....  
end if

-edit- Schreibfehler korrigiert
hellas
hellas 10.02.2015 um 15:18:37 Uhr
Goto Top
Ich arbeite ja noch mit Outlook 2003 da gab es die Trennung von Kategorien und Nachverfolgung noch nicht.

Wenn ich jetzt die Nachverfolgung setzte, kann ich zwischen "Roter kennzeichnung", "Blaue Kennzeichnung" etc... wählen.
Die würde ich auch noch gerne abfragen können.

Kategorien habe ich "nur" Feiertage, Favoriten, Geschäftlich usw...

Danke für deine Hilfe.
colinardo
colinardo 10.02.2015 aktualisiert um 15:22:02 Uhr
Goto Top
Zitat von @hellas:
Ich arbeite ja noch mit Outlook 2003 da gab es die Trennung von Kategorien und Nachverfolgung noch nicht.
Ah OK.
Das kannst du ja im Filter festlegen:
[FlagRequest] = 'Blaue Kennzeichnung'
und bei Bedarf mehrere mit OR kombinieren wenn mehrere Gewünscht sind. Das Feld enthält ja die Kennzeichnung als simplen String.
hellas
hellas 11.02.2015 um 08:24:42 Uhr
Goto Top
Hi,

funktioniert leider nicht face-sad
"Zur Nachverfolgung" geht aber "Blaue Kennzeichnung" erkennt er nicht.
colinardo
colinardo 11.02.2015 aktualisiert um 09:03:28 Uhr
Goto Top
Ich krame mal das Outlook 2003 aus der Schublade...
colinardo
colinardo 11.02.2015 aktualisiert um 12:13:43 Uhr
Goto Top
OK, die Eigenschaft in Outlook 2003 lautet FlagIcon. Diese kannst du ebenfalls nicht im Filter verwenden so dass du es mit einer If-Abfrage deiner gefilterten Mails machen musst (s. Zeile 13):
Sub EmailRead()
    Dim olApp as Object, objFolder as Object, mail as Object, rngCurrent as Range
    Set olApp = CreateObject("outlook.application")  
    Set objFolder = olApp.GetNamespace("MAPI").GetDefaultFolder(6) ' 6 = olFolderInbox  
    
    With Sheets("Tabelle1")  
        'Sheetinhalt löschen  
        .UsedRange.Clear
        'Startausgabezelle setzen  
        Set rngCurrent = .Range("A1")  
        ' Mails auf ungelesene und gleichzeitig geflaggte beschränken  
        For Each mail In objFolder.Items.Restrict("[Unread] = True AND [FlagRequest] = 'Zur Nachverfolgung'")  
           if mail.FlagIcon = 5 then
              rngCurrent.Value = mail.Subject
              ' Ausgabe eine Zeile nach unten verschieben  
              Set rngCurrent = rngCurrent.Offset(1, 0)
           End if
        Next
    End With
    Set olApp = Nothing
    Set objFolder = Nothing
End Sub
Es gibt hier folgende Enumerations-Konstanten als Wert für FlagIcon:
https://msdn.microsoft.com/en-us/library/office/aa211991%28v=office.11%2 ...
olNoFlagIcon (0)
olPurpleFlagIcon (1)
olOrangeFlagIcon (2)
olGreenFlagIcon (3)
olYellowFlagIcon (4)
olBlueFlagIcon (5)
olRedFlagIcon (6)
Grüße Uwe
hellas
hellas 11.02.2015 um 09:05:19 Uhr
Goto Top
face-smile Danke
colinardo
colinardo 11.02.2015 aktualisiert um 09:24:23 Uhr
Goto Top
Nicht vergessen den Beitrag noch auf gelöst zu setzen. Merci.
hellas
hellas 11.02.2015 um 11:31:48 Uhr
Goto Top
Super funktioniert.
Ich musste die olBlueFlagTools ersetzen durch 5 und es geht.
Den Rest baue ich mir jetz darum.

Danke für die sehr kompetente Hilfe !!
colinardo
colinardo 11.02.2015 aktualisiert um 12:15:22 Uhr
Goto Top
Zitat von @hellas:
Ich musste die olBlueFlagTools ersetzen durch 5 und es geht.
Stimmt mit der Konstanten geht es nur wenn du es in Outlook selber nutzt, hatte ich vergessen das dein Code in Excel läuft face-wink
Danke für die sehr kompetente Hilfe !!
Gerne face-smile
karolson
karolson 02.06.2016 um 09:13:23 Uhr
Goto Top
Hallo colinado,
wie kann ich auch gleichzeitig den Inhalt von ungelesenen E-Mails in die andere Spalte ausgeben lassen? Danke
MfG
colinardo
colinardo 02.06.2016 aktualisiert um 10:31:22 Uhr
Goto Top
Einfach per Offset die Spalte neben dran ansprechen:
 rngCurrent.Offset(0,1).Value = mail.Body
Alle Maileigenschaften findest du in der MSDN Referenz für Outlook...

Grüße Uwe

p.s. Bitte in Zukunft kein "Übernehmen" von Threads von anderen Usern mehr.Merci.