Registriert seit: 04.07.2018
Version(en): Office 2016
04.07.2018, 18:43
Hallo Zusammen,
VBA Abfrage in Excel - auslesen von Emails aus Outlook 2016 mit Formatierung.
Ich möchte gerne Emails aus einem Unterordner (nennen wir ihn "Profile") des Posteingangs auslesen und diese in Excel importieren. Jedes Email soll in einer Zeile dargestellt sein. Spaltenüberschriften sollen sein: von / an / Betreff / Datum Uhrzeit / Emailtext
In den Emails sind bestimmte Worte "gelb" markiert. Diese Markierung (Formatierung des Emails ?) brauche ich in Excel um danach zu suchen und damit weiterzuarbeiten.
Ich habe hier im Forum schon ähnliche Macros gesehen, diese auch versucht umzuschreiben - keine Chance! Dazu brauche ich eure Hilfe!
Ich freue mich über jeden Hinweis.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Karin,
wenn Du es schon ohne Formatierung hinbekommen hast, dann poste doch mal den Code. Ich nehme an, wenn es überhaupt funktionieren soll, müsstest Du den E-Mail-Text als html auslesen und schauen, wo die Farbtags sind.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 04.07.2018
Version(en): Office 2016
05.07.2018, 11:09
(Dieser Beitrag wurde zuletzt bearbeitet: 06.07.2018, 18:53 von WillWissen.
Bearbeitungsgrund: Codetags
)
Hallo, ich habe folgenden Code gefunden, der aber bei mir nicht läuft und auch nicht auf den Unterordner referenziert. Code: Sub OutlookPosteingang() 'Variablendeklaration Dim OLF As Outlook.MAPIFolder Dim AnzEintraege As Integer, i As Integer, Email As Integer ' Hier wird Tabelle hinzugefügt Sheets.Add 'Globale Fehlerbehandlung -> Excel soll automatisch weitermachen, egal welcher Fehler On Error Resume Next ' Überschriften im neuen Blatt -> die erste Zeile von A1 - E1 [A1].Value = "Betreff" [B1].Value = "Datum Uhrzeit" [C1].Value = "empfangen von" [D1].Value = "gelesen" [E1].Value = "Nachricht" 'Erste Zeile Fett formatiert Rows(1).Font.Bold = True 'Setzen der Variable als Outlook Application; Zugriff auf Outlook Set OLF = GetObject("", "Outlook.Application") _ .GetNamespace("MAPI").GetDefaultFolder(olFolderInbox) 'Setzen Variable -> es sollen alle Nachrichten im Ordner 'Posteingang (olFolderInbox) gezählt werden AnzEintraege = OLF.Items.Count 'Setzen der Variablen auf '0' i = 0: Email = 0 'Beginn Schleifendurchlauf (Schleife 1) -> die Variable 'i' läuft solange, wie Anzahl der EMails vorhanden sind While i < AnzEintraege i = i + 1 'Anzeigen einer Nachricht in der Statuszeile Application.StatusBar = "Lese Posteingang " & _ Format(i / AnzEintraege, "0%") 'Was soll mit den Nachrichten geschehen? (Schleife 2) With OLF.Items(i) Email = Email + 1 'Zelle 1 mit dem Wert Betreff in der EMail Cells(Email + 1, 1).Value = .Subject 'Zelle 2 mit dem Wert 'Empfangen am' in der EMail Cells(Email + 1, 2).Value = .ReceivedTime 'Zelle 3 Absender Cells(Email + 1, 3).Value = .SenderName 'Zelle 4 der gelesenen Nachrichten Cells(Email + 1, 4).Value = Not .UnRead 'Zelle 5 mit der eigentlichen Nachricht Cells(Email + 1, 5).Value = .Body 'Ende der Schleife 2 End With 'Ende der Schleife 1 Wend 'Die Variable muss wieder auf Null gesetzt werden = nothing halt Set OLF = Nothing 'Die Spalten sollen automatisch in der Breite angeglichen werden Columns("A:E").AutoFit 'Die Zelle 'A2' soll selektiert werden [A2].Select 'Die Exceldatei wird gespeichert ActiveWorkbook.Saved = True 'Die Statuszeile wird wieder ausgeschaltet Application.StatusBar = False End Sub
Vielleicht kann das jemand anpassen. Danke Karin
Registriert seit: 04.07.2018
Version(en): Office 2016
06.07.2018, 17:14
(Dieser Beitrag wurde zuletzt bearbeitet: 06.07.2018, 18:52 von WillWissen.
Bearbeitungsgrund: Codetags
)
So, dieser Code läuft durch. Jetzt fehlt mir nur noch, wie ich HTML Format nach Excel bekomme. Vielleicht hat hier jemand eine Info für mich. Code: Sub OutlookPosteingang() 'Variablendeklaration Dim olApp As Outlook.Application Dim olVerz As Outlook.MAPIFolder Set olApp = CreateObject("Outlook.Application") Set olVerz = olApp.GetNamespace("Mapi").GetDefaultFolder(olFolderInbox).Folders("Test") Dim AnzEintraege As Integer, i As Integer, Email As Integer ' Hier wird eine Tabelle hinzugefügt Sheets.Add
'Globale Fehlerbehandlung -> Excel soll automatisch weitermachen, egal welcher Fehler 'On Error Resume Next' ' Überschriften im neuen Blatt -> die erste Zeile von A1 - F1 [A1].Value = "Betreff" [B1].Value = "Datum Uhrzeit" [C1].Value = "empfangen von" [D1].Value = "gelesen" [E1].Value = "Nachricht" [F1].Value = "Dateianhänge" 'Erste Zeile soll Fett formatiert werden Rows(1).Font.Bold = True 'Setzen der Variable als Outlook Application; Zugriff auf Outlook Set OLF = GetObject("", "Outlook.Application") _ .GetNamespace("Mapi").GetDefaultFolder(olFolderInbox).Folders("Test") 'Setzen der Variable -> es sollen alle Nachrichten im Ordner 'Test (Folders) gezählt werden AnzEintraege = OLF.Items.Count 'Setzen der Variablen auf '0' i = 0: Email = 0 'Beginn Schleifendurchlauf (Schleife 1) -> die Variable 'i' läuft solange, wie Anzahl der EMails vorhanden sind While i < AnzEintraege i = i + 1 'Anzeigen einer Nachricht in der Statuszeile Application.StatusBar = "Lese Test" & _ Format(i / AnzEintraege, "0%") 'Was soll mit den Nachrichten geschehen? (Schleife 2) With OLF.Items(i) Email = Email + 1 'Zelle 1 mit dem Wert Betreff in der EMail Cells(Email + 1, 1).Value = .Subject 'Zelle 2 mit dem Wert 'Empfangen am' in der EMail Cells(Email + 1, 2).Value = .ReceivedTime 'Zelle 3 Absender Cells(Email + 1, 3).Value = .SenderName 'Zelle 4 der gelesenen Nachrichten Cells(Email + 1, 4).Value = Not .UnRead 'Zelle 5 mit der eigentlichen Nachricht Cells(Email + 1, 5).Value = .Body 'Zelle 6 -> Anzahl der Anhänge in der EMail Cells(Email + 1, 6).Value = .Attachments.Count 'Löschen der Leerzeilen" Dim lgCount As Long Dim lgLetzte As Long lgLetzte = Range("E65536").End(xlUp).Row For lgCount = lgLetzte To 1 Step -1 If IsEmpty(Cells(lgCount, 1)) Then Cells(lgCount, 1).Delete shift:=xlUp End If Next 'Ende der Schleife 2 End With 'Ende der Schleife 1 Wend 'Die Variable muss wieder auf Null gesetzt werden = nothing halt Set OLF = Nothing 'Die Spalten sollen automatisch in der Breite angeglichen werden Columns("A:F").AutoFit 'Die Zelle 'A2' soll selektiert werden [A2].Select 'Die Exceldatei wird gespeichert ActiveWorkbook.Saved = True 'Die Statuszeile wird wieder ausgeschaltet Application.StatusBar = False End Sub
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Karin, erst mal ein Anfang mit dem html-body. Den bekommst Du z.B. so: Code: strhb = Right(.HTMLBody, Len(.HTMLBody) - InStr(1, .HTMLBody, "</head>") - 6)
Als nächstes müsstest Du den Body nach den Farben durchsuchen, die könnten z.B. so codiert sein: PHP-Code: <span style='color:red'>Dokumentenordner</span>
Du könntest in dem String also z.B. nach Color suchen, zwischen Doppelpunkt und Hochkomma steht dann die Farbe, und der anschließende Text bis zum Spanende bekommt selbige dann.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• Karin-Lana
Registriert seit: 04.07.2018
Version(en): Office 2016
10.07.2018, 17:42
(Dieser Beitrag wurde zuletzt bearbeitet: 10.07.2018, 17:42 von Karin-Lana.)
Hallo schauan, es läuft jetzt durch, aber das Ergebnis ist wie folgt und hilft leider nicht. <meta name="Generator" content="Microsoft Word 15 (filtered medium)"> <style>
•
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Karin,
die Codezeile muss erst mal irgendwo zwischen With OLF.Items(i) und End With stehen. Den erzeugten String könntest Du Dir z.B. erst mal mit Debug.Print strhb im Direktfenster ausgeben oder packst ihn in eine Zelle.
Dann solltest Du sie auch wie von mir gepostet schreiben,
also nicht … InStr(1, .HTMLBody, "") ... sondern … InStr(1, .HTMLBody, "") …
Ein Problemchen könnte es geben, wenn es sich um eine Textmail handelt und keine html-mail. Mit dem InStr könntest Du das vorab prüfen
If InStr(1, .HTMLBody, "") > 0 then … hier den string bilden End if
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 04.07.2018
Version(en): Office 2016
Hallo Schauan,
sorry dass ich nochmal Nachfrage, hast du versehentlich den gleichen Befehl kopiert?
Zitat aus deiner Nachricht:
also nicht … InStr(1, .HTMLBody, "") ... sondern … InStr(1, .HTMLBody, "") …
Da gibt es jetzt kein Unterschied in den beiden genannten Befehlen.....
Danke dir.
Viele Grüße Karin
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
10.07.2018, 19:58
(Dieser Beitrag wurde zuletzt bearbeitet: 10.07.2018, 19:58 von schauan.)
Hallo Karin, danke für den Hinweis, aber das hat eine andere Ursache  Die Forumsseite versucht, den Code zu interpretieren … Hier mal in Code-Tags, damit das nicht passiert: PHP-Code: … InStr(1, .HTMLBody, "</head>") …
Das sieht dann aus wie in #5
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 04.07.2018
Version(en): Office 2016
ich komme nicht weiter, bin gerade genervt. Mache jetzt mal Feierabend.
Komme Morgen wieder rein. Vielleicht bin ich dann ein Stück weiter.
Liebe Grüße Karin
|