Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1500to1504
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Emails in Excel auslesen

Emails in Excel auslesen
01.07.2016 14:07:21
Benno
Hey zusammen,
habe ein neues (wahrscheinlich nicht allzu großes) Problem bei unten stehendem folgendem Makro:
Ich möchte statt dem Posteingang, einen Unterordner im Posteingang als Quelle für die Emails nutzen. Und wenn möglich, soll in diesem Ordner ein weiterer Unterordner sein ("Erledigt", in den die Emails nach dem Auslesen verschoben werden.
Hat jemand eine Idee?
Danke im Voraus -
Benno
---
Option Explicit
Sub ReadOutlookMails()
Dim olApp      As Object   ' das Outlook-Objekt
Dim objFolder  As Object   ' der Standard-Posteingangsordner
Dim objItem    As Object   ' ein Objekt in objFolder
Dim i          As Long     ' Zeilennummer
Dim objRe      As Object   ' ein Regular-Expression Objekt
Dim objMc      As Object   ' eine MatchCollection, das Ergebnis von objRe.Execute
Dim objMatch   As Object   ' ein Match, d.h. ein Eintrag der Form "irgendwas:sonstwas"
Dim objDic     As Object   ' ein Dictionary-Objekt, Key sind die möglichen Werte vor dem  _
Doppelpunkt, Item ist die Spaltenummer wo das hinsoll
Dim varKey     As Variant  ' ein Key im Dictionary
Dim strKey     As String   ' dito
Set objDic = CreateObject("scripting.dictionary")
i = 3 'abhängig von den Variablen (Betreff, Absender, ...)
'erst Zeile, dann Spalte
Cells(1, 1).Value = "Betreff" 'schreibt die Überschriften in Zeile 1
Cells(1, 2).Value = "Absender"
Cells(1, 3).Value = "Datum"
For Each varKey In Array("Projekt", "Tätigkeit", "Stunden") 'gleicher Aufbau mehr Variablen  _
möglich
i = i + 1
objDic(varKey) = i
Cells(1, i).Value = varKey
Next
Set objRe = CreateObject("vbscript.regexp")
objRe.Global = True
objRe.MultiLine = True
objRe.Pattern = "^(.*?):[ \t]*(.*?)[\r\n]?$"
Set olApp = CreateObject("outlook.application")
Set objFolder = olApp.GetNamespace("MAPI").GetDefaultFolder(6) ' 6 = olFolderInbox
i = 1
For Each objItem In objFolder.Items
If TypeName(objItem) = "MailItem" Then
Set objMc = objRe.Execute(objItem.Body)
If objMc.Count > 0 Then
Cells(i + 1, 1).Value = objItem.Subject 'nimmt Betreff in Spalte A
Cells(i + 1, 2).Value = objItem.Sender 'nimmt Absender in Spalte B
Cells(i + 1, 3).Value = objItem.ReceivedTime 'Datum in Spalte C
i = i + 1
For Each objMatch In objMc
strKey = objMatch.Submatches(0)
If objDic.Exists(strKey) Then Cells(i, objDic(strKey)) = objMatch.Submatches(1)
Next
End If
End If
Next
objDic.RemoveAll
Set objDic = Nothing
Set objMc = Nothing
Set objRe = Nothing
Set objFolder = Nothing
Set olApp = Nothing
End Sub
---

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Emails in Excel auslesen
01.07.2016 16:30:02
firmus
Hi Benno,
hier ein Beispiel, das über 4 FolderLevel zugreift.
Für Level-1 wird im Dialog der gesuchte Folder abgefragt, Lev2, Lev3, Lev4 werden fix gesetzt (faul).
Ausgelesen wird in diesem Beispiel aus Level-1. Das kann aber mit einer Statementänderung angepasst werden.
Probier's einfach, Schönheitspreis habe ich keinen gewonnen, musste wie immer schnell gehen.
("Doku", was ist das?)
Gruß
Firmus

AW: Emails in Excel auslesen
01.07.2016 22:22:02
Benno
Hey Firmus,
Was soll ich sagen... Boah, krass und auch natürlich danke! Aber Du überschätzt meine Fähigkeiten und meine (momentanen) Bedürfnisse in hohem Maße! ;)
Langfristig finde ich deine Datei sehr interessant...aber im Moment würde ich es gerne auf mein kleines schlankes Makro (mit de bereits definierten Variablen) beschränken ...nur eben mit den beiden Funktionen ... Machbar? Oder muss es dann so komplex werden?
Danke für Deine Mühen!
Benno

AW: Emails in Excel auslesen
01.07.2016 22:52:36
firmus
Hallo Benno,
ich habe ein eigenes Muster eingestellt, weil ich mich mit REGEX und Dictionary bisher nur theoretisch befasst habe (verstanden aber noch nicht angewandt - schade).
Aber um Deinem Bedarf mit meiner VBA näher zu kommen:
Starte das Makro mit der F8-Taste (Einzelschritt-Modus) und gehe die entscheidenden Stellen einfach mit F8 + Display im Überwachungsfenster durch.
Inhaltlich ist die Sache trival, wichtig ist nur, dass ein Folder sowohl einen Folder als auch Items beinhalten kann. Über den ....Folder.Count bzw. Items.Count siehst Du die Menge der Einträge.
Wenn in einem Folder einen Folder-Eintrag nimmst, bist Du auf dem nächsten Folder-Level.
Jeder Level sollte seine eigenen, erkennbaren Definition haben: L1Folder L1Item, L2Folder, L2Item ...
Das Überwachungsfenster zeigt Dir z. B. einen ganzen Folder. Den gesamten Strukturbaum kannst Du ansehen, und anschließend entsprechend die Details im Makro ansprechen - Geduld ist nötig.
Key zum Erfolg: Überwachungsfenster einsetzen können (Google hilft) und F8 anwenden.
Viel Erfolg,
Firmus

Anzeige
AW: Emails in Excel auslesen
03.07.2016 20:10:05
Benno
Hey Firmus,
danke für deine Antwort und Ideen zur Herangehensweise ... so werde ich es bei Zeiten machen... ich will es einfach von Anfang an lernen ;)
Aber, ich habe zufällig schon eine Lösung gefunden:
Option Explicit
'funktionirt einwandfrei, HEader und Body beliebig möglich
'Problem: nicht nach Betreff filterbar
Sub ReadOutlookMails()
Dim olApp      As Object   ' das Outlook-Objekt
Dim objFolder  As Object   ' der Standard-Posteingangsordner
Dim objItem    As Object   ' ein Objekt in objFolder
Dim i          As Long     ' Zeilennummer
Dim objRe      As Object   ' ein Regular-Expression Objekt
Dim objMc      As Object   ' eine MatchCollection, das Ergebnis von objRe.Execute
Dim objMatch   As Object   ' ein Match, d.h. ein Eintrag der Form "irgendwas:sonstwas"
Dim objDic     As Object   ' ein Dictionary-Objekt, Key sind die möglichen Werte vor dem  _
Doppelpunkt, Item ist die Spaltenummer wo das hinsoll
Dim varKey     As Variant  ' ein Key im Dictionary
Dim strKey     As String   ' dito
Set objDic = CreateObject("scripting.dictionary")
i = 3 'abhängig von den Variablen (Betreff, Absender, ...)
'erst Zeile, dann Spalte
Cells(1, 1).Value = "Betreff" 'schreibt die Überschriften in Zeile 1
Cells(1, 2).Value = "Absender"
Cells(1, 3).Value = "Datum"
For Each varKey In Array("Projekt", "Tätigkeit", "Stunden") 'gleicher Aufbau mehr Variablen  _
möglich
i = i + 1
objDic(varKey) = i
Cells(1, i).Value = varKey
Next
Set objRe = CreateObject("vbscript.regexp")
objRe.Global = True
objRe.MultiLine = True
objRe.Pattern = "^(.*?):[ \t]*(.*?)[\r\n]?$"
Set olApp = CreateObject("outlook.application")
'Set objFolder = olApp.GetNamespace("MAPI").GetDefaultFolder(6) ' 6 = olFolderInbox
Set objFolder = olApp.GetNamespace("MAPI").Folders("name@xxx.de").Folders("Ordnername")
i = 1
For Each objItem In objFolder.Items
If TypeName(objItem) = "MailItem" Then
Set objMc = objRe.Execute(objItem.Body)
If objMc.Count > 0 Then
Cells(i + 1, 1).Value = objItem.Subject 'nimmt Betreff in Spalte A
Cells(i + 1, 2).Value = objItem.Sender 'nimmt Absender in Spalte B
Cells(i + 1, 3).Value = objItem.ReceivedTime 'Datum in Spalte C
i = i + 1
For Each objMatch In objMc
strKey = objMatch.Submatches(0)
If objDic.Exists(strKey) Then Cells(i, objDic(strKey)) = objMatch.Submatches(1)
Next
End If
End If
Next
objDic.RemoveAll
Set objDic = Nothing
Set objMc = Nothing
Set objRe = Nothing
Set objFolder = Nothing
Set olApp = Nothing
End Sub
---
Danke und bestimmt bis demnächst ;)
Benno

Anzeige
AW: Emails in Excel auslesen
02.07.2016 12:27:25
mumpel
Hallo!
Schau mal in meinen Outlook-Workshop. Da kannst Du sehen wie man Emails auslesen kann (ohne RegEx). Dort zeige ich auch wie man Ordner rekursiv durchlaufen kann ("Ordner löschen". Musst Du nur für das Auslesen entsprechend anpassen/anwenden).
Gruß, René

AW: Emails in Excel auslesen
03.07.2016 20:23:48
Benno
Hey René,
danke für den Tipp...sieht sehr interessant aus!
Ich werde mal schauen... bin erst am Anfang!
Beste Grüße
Benno

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige