HERBERS Excel-Forum - das Archiv

Thema: Info aus Outlook-Mails in Excel übertragen

Info aus Outlook-Mails in Excel übertragen
Kisska
Hallo zusammen,

ich möchte aus Outlook-Emails, die eine gleiche Struktur haben, Inhalte in Excel übertragen.

In meiner Excel habe in der ersten Zeile diese Überschriften:
A1: E-Mail erhalten am

B1: Produkt-Nummer
C1: Link zum Produkt
D1: Datum mit Uhrzeit


In die zweite Zeile sollen die Daten aus den Mails einkopiert werden.

Die Mails liegen in einem Unterordner von Posteingang namens "Test".
Eine E-Mail ist so aufgebaut:
Hallo XY,

blabla Produkt_01 läuft aus am 01.01.2024 12:00

VG

Dabei ist hinter dem Produkt_01 ein Hyperlink.

Ich habe versucht ein VBA nach diesem Tutorial aufzubauen:
https://www.youtube.com/watch?v=R6kWnPLFNxE
Interessant wird's ab der 16. Minute.
Und da bekomme ich im Überwachungsfenster Folgendes: .
Ich kann also auf das Brillen-Symbol nicht gehen und den Rest wie im Video definieren.

Hat jemand eine Idee, warum?
Oder: Kennt jemand ein VBA-Code mit dem der Export wie beschrieben funktioniert?

VG
Kisska
AW: Info aus Outlook-Mails in Excel übertragen
Oberschlumpf
Hi,

bei meinem Versuch, das Vodeo anzusehen, stockte dieses mehrmals während der Wiedergabe, und ich konnte nicht jede Sekunde/Minute sehen.
Ich weiß nicht, OB ES DAS ist, was du meinst.

Wenn man sich aber im Video "durchklickt", sieht man fast am Ende den gesamten Code:
Userbild

Wie gesagt, ich weiß nicht, ob du uns fragtest, "wie sieht der gesamte Code aus?", oder ob du ein anderes Problem hast.

Ach ja, du weißt aber schon, dass der Code a) eigtl für Outlook-VBA ist, also nicht in die Excel-datei gehört, oder b) wenn du das doch in Excel haben willst, musst du im VBE in Extras/Verweise den Outlook-Verweis setzen.
(wenn genau das im Video vllt zu Beginn erklärt/gezeigt wird, was ihc nicht gesehen habe, dann vergiss diesen Hinweis)

Kannst du bitte uns den Code hier in der nächsten Antwort reinschreiben, oder hab ich dir schon helfen können?

Ciao
Thorsten
AW: Info aus Outlook-Mails in Excel übertragen
Kisska
Hi Thorsten,

danke für die Antwort.
Ich habe vergessen, meinen Code zu posten:
Option Explicit


Sub ExtractData()


Dim O As Outlook.Application
Set O = New Outlook.Application

Dim OMAIL As Outlook.MailItem
Set OMAIL = O.CreateItem(olMailItem)

Dim ONS As Outlook.Namespace
Set ONS = O.GetNamespace("MAPI")

Dim MYFOL As Outlook.Folder

Set MYFOL = ONS.GetDefaultFolder(olFolderInbox).Folders("Test")
' für Posteingang: Set MYFAL = ONS.GetDefaultFolder(olFolderInbox)
Dim MYARRAY As Variant

For Each OMAIL In MYFOL.Items

MYARRAY = Split(OMAIL.Body, vbCrLf)

Next OMAIL



End Sub


Diesen Code habe unter Excel im VBA-Editor eingefügt und auch den Outlook-Verweis in den Einstellungen gesetzt.

Wenn ich den Code bis dahin ausführe, bekomme ich im Überwachungsfenster das angezeigt:
Userbild

VG
Kisska

AW: Info aus Outlook-Mails in Excel übertragen
Fennek
Hallo,

als ersten Ansatz, um die Informationen aus der Mail zu lesen:


Sub Kisska()
Dim EML As MailItem, Tag As Date, RegEx As Object, RR As Object
Dim Doc As Word.Document

If RegEx Is Nothing Then Set RegEx = CreateObject("VBScript.RegExp")
RegEx.Pattern = "\d{2}\.\d{2}\.\d{4}\s\d{2}:\d{2}"

Set EML = ActiveExplorer.Selection(1)

Set RR = RegEx.Execute(EML.Body)

Set Doc = EML.GetInspector.WordEditor

Debug.Print EML.ReceivedTime, CDate(RR(0)), Doc.Hyperlinks(1).Address
End Sub


Jetzt fehlt noch eine Schleife über die Mails in Test (ohne Doppelte)

Dim FLD as Folder
set Folder = ...
for i = 1 to fld.items.count
set EML = fld.items(i)
next i

Ergänzt werden muss jede Art von Fehlermöglichkeit, z.B. im Ordner liegen Nicht-Mailitems

mfg
AW: Info aus Outlook-Mails in Excel übertragen
Kisska
Hallo Fennek,

danke für deine Antwort.

Deinen Ansatz verstehe ich leider nicht, liegt wohl daran, dass ich mich mit VBA nicht auskenne.
Bei dem ersten Teil des Codes kommt direkt eine Fehlermeldung: ... Typ nicht definiert und zwar bei dieser Zeile "Dim Doc As Word.Document"

Den zweiten Teil weiß ich nicht wie zu ergänzen und was nach "set Folder = ..." folgen muss

VG
Kisska
AW: Info aus Outlook-Mails in Excel übertragen
Alwin Weisangler
Hallo,

ich habe es mal auf die Schnelle getestet. Da ich nur ein paar Mails im Ordner für gelöschte Mails drin hatte, kam dieser Weg unter Nutzung der Intellisense (Aktivierung der Outlook Bibliothek "Microsoft Outlook 16.0 Object Library") heraus, welcher problemlos funktioniert.


Option Explicit

Sub BodyAusGeloeschtenEmailsLesen()
Dim O As Outlook.Application
Dim OMAIL As Outlook.MailItem
Dim ONS As Outlook.Namespace
Dim MYFOL As Outlook.Folder
Dim MYARRAY As Variant

Set O = New Outlook.Application
Set OMAIL = O.CreateItem(olMailItem)
Set ONS = O.GetNamespace("MAPI")
Set MYFOL = ONS.GetDefaultFolder(olFolderDeletedItems)

For Each OMAIL In MYFOL.Items
MYARRAY = Split(OMAIL.Body, vbCrLf)
Next OMAIL
End Sub


Gruß Uwe
AW: Info aus Outlook-Mails in Excel übertragen
Alwin Weisangler
anbei mal noch der Weg dies in ein ausgabefähiges Array zu übergeben.
Damit kann man den Inhalt des Arrays in ein Tabellenblatt schreiben.


Option Explicit

Sub BodyAusGeloeschtenEmailsLesen()
Dim O As Outlook.Application
Dim OMAIL As Outlook.MailItem
Dim ONS As Outlook.Namespace
Dim MYFOL As Outlook.Folder
Dim MYARRAY As Variant
Dim arr(), i&, iZeilen&, iItems&

Set O = New Outlook.Application
Set OMAIL = O.CreateItem(olMailItem)
Set ONS = O.GetNamespace("MAPI")
Set MYFOL = ONS.GetDefaultFolder(olFolderDeletedItems)

For Each OMAIL In MYFOL.Items ' Schleife zum lesen der maximalen Dimensionierung des Arrays
MYARRAY = Split(OMAIL.Body, vbCrLf)
iItems = iItems + 1
If UBound(MYARRAY) > iZeilen Then iZeilen = UBound(MYARRAY)
Next OMAIL
ReDim arr(1 To iItems + 1, 1 To iZeilen) ' Dimensionierung des Arrays
iItems = 0
For Each OMAIL In MYFOL.Items ' Schleife zum füllen des Arrays
MYARRAY = Split(OMAIL.Body, vbCrLf)
iItems = iItems + 1
For i = 1 To UBound(MYARRAY)
arr(iItems, i) = MYARRAY(i - 1)
Next i
Next OMAIL
Tabelle1.Cells(1, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr
End Sub


Gruß Uwe
AW: Info aus Outlook-Mails in Excel übertragen
Kisska
Hallo Uwe,

danke für die Antwort.
Da mein Outlook-Ordner Test heißt, habe ich in deinem Code, folgende Zeile angepasst:
 Set MYFOL = ONS.GetDefaultFolder(olFolderDeletedItems)


Zu der hier:
Set MYFOL = ONS.GetDefaultFolder(olFolderTest)


Mir wird aber als Fehler angezeigt "Variable nicht definiert".
Was müsste ich ergänzen?

VG
Kisska
AW: Info aus Outlook-Mails in Excel übertragen
Alwin Weisangler
Hallo,

schau dir mal die Verzeichniskonstanten an:
https://learn.microsoft.com/de-de/office/vba/api/outlook.oldefaultfolders

Jetzt wäre die Frage, in welchen der Standartverzeichnisse von Outlook befindet sich das Verzeichnis "Test"


Set MYFOL = ONS.GetDefaultFolder(olFolderInbox).Folders("Test") ' für Posteingangsordner

Um ein neues Verzeichnis im Posteingangsordner zu erzeugen, kann man mit der Objektvariable MYFOL dies so machen:


MYFOL.Folders.Add ("TestIrgenwas")

Um dieses Verzeichnis wieder zu löschen, wäre der Weg so:


MYFOL.Folders("TestIrgenwas").Delete


Gruß Uwe
AW: Info aus Outlook-Mails in Excel übertragen
Alwin Weisangler
Sollte der Ordner "Test" in "Persönliche Ordner" angelegt sein, wäre der Zugriff so:


Set MYFOL = ONS.Folders.Item("Persönliche Ordner").Folders("Test")


Gruß Uwe
AW: Info aus Outlook-Mails in Excel übertragen
Kisska
Hallo Uwe,

dein Code:


Option Explicit

Sub BodyAusGeloeschtenEmailsLesen()
Dim O As Outlook.Application
Dim OMAIL As Outlook.MailItem
Dim ONS As Outlook.Namespace
Dim MYFOL As Outlook.Folder
Dim MYARRAY As Variant
Dim arr(), i&, iZeilen&, iItems&

Set O = New Outlook.Application
Set OMAIL = O.CreateItem(olMailItem)
Set ONS = O.GetNamespace("MAPI")
Set MYFOL = ONS.GetDefaultFolder(olFolderDeletedItems)

For Each OMAIL In MYFOL.Items ' Schleife zum lesen der maximalen Dimensionierung des Arrays
MYARRAY = Split(OMAIL.Body, vbCrLf)
iItems = iItems + 1
If UBound(MYARRAY) > iZeilen Then iZeilen = UBound(MYARRAY)
Next OMAIL
ReDim arr(1 To iItems + 1, 1 To iZeilen) ' Dimensionierung des Arrays
iItems = 0
For Each OMAIL In MYFOL.Items ' Schleife zum füllen des Arrays
MYARRAY = Split(OMAIL.Body, vbCrLf)
iItems = iItems + 1
For i = 1 To UBound(MYARRAY)
arr(iItems, i) = MYARRAY(i - 1)
Next i
Next OMAIL
Tabelle1.Cells(1, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr
End Sub


mit dieser Zeile von dir:
Set MYFOL = ONS.GetDefaultFolder(olFolderInbox).Folders("Test")    '  für Posteingangsordner


funktioniert nun auch bei mir.
Der Body aus dem E-Mails wird in Excel übertragen, jede Zeile oder jeder Abschnitt in eigene Spalte.
Da ich nicht den gesamt Inhalt brauche, sondern nur einzelne Daten aus der E-Mail, möchte ich wie im Video Überwachung für MYARRAY hinzufügen. Wenn ich das mache, bekomme ich trotzdem im Überwachungsfenster angezeigt "Außerhalb des Kontexts" bei Wert. Was mache ich falsch?

VG
Kisska
AW: Info aus Outlook-Mails in Excel übertragen
Alwin Weisangler
Hallo,

Das Video habe ich keine 2 Minuten ausgehalten. Es ist einfach nur endloses Geplapper um wenig Erforderliches.

Welche Daten benötigst du??
Beschreibe bitte exakt was du ausgeben möchtest.

Gruß Uwe

AW: Info aus Outlook-Mails in Excel übertragen
Kisska
Hallo Uwe,

hier meine Aufgabe nochmal veranschaulicht:
Userbild

In meinem Outlook-Unterordner "Test" (Unterordner vom Posteingang) befinden sich E-Mails mit der gleichen Struktur (wie im Bild links).
Rechts im Bild sieht man wie ich die Übersicht gestalten möchte. In der ersten Zeile befinden sich vier Überschriften. Ab Zeile sollen die entsprechenden Daten aus den E-Mails übertragen werden.
In der Spalte A sollte das Datum stehen, wann ich die E-Mails erhalten habe (Datum & Uhrzeit).
In der Spalte B sollte die Produkt-Nummer stehen. Diese befindet sich als Hyperlink in der E-Mail in der Zeile nach der Begrüßung. Hier A-001. Diese Nummer steht aber auch im Betreff.
In der Spalte C sollte der Hyperlink zum Produkt stehen.
In der Spalte D sollte die Frist (Datum & Uhrzeit) stehen. Diese Info steht sowohl im Body von der E-Mail als auch im Betreff.

Es wäre schön, wenn man alle E-Mails, die sich in dem Test-Unterordner befinden, auf Knopfdruck in die Excel-Übersicht übertragen könnte.
Dabei sollte die Übersicht nach der ersten Spalte aufsteigend gefiltert werden.
Wenn neue E-Mails in den Test-Ordner kommen, dann sollte die Übersicht um neue Daten ergänzt werden, d.h. alte Daten sollen bleiben.
Doppelte E-Mails sollten erkannt werden und nicht doppelt übertragen werden.

VG
Kisska
AW: Info aus Outlook-Mails in Excel übertragen
Alwin Weisangler
Hallo Kisska,

es sind ja alles Daten aus dem Body und somit im Array drin enthalten.
Setze am Ende der Prozedur in Zeile 34 einen Haltepunkt.
Lass die Prozedur bis zum Haltepunkt laufen.
Benutze/Aktiviere das Direktfenster und Schau ins Array "arr".
Da findest du die relevanten Zellen mit den gewünschten Inhalten.
Da ich nicht sehen kann was in welchen Zellen des Arrays steht, musst dir ab dieser Stelle selbst helfen und dich mit der Verarbeitung/Manipulation von Arrays beschäftigen. Dann kannst du daraus eine brauchbare/gewünschte Ausgabe stricken.
Ohne exakte Kenntnisse zum Inhalt der Arrayzelle kann ich dir leider ab hier nicht weiterhelfen.

Gruß Uwe
AW: Info aus Outlook-Mails in Excel übertragen
Kisska
Hallo Uwe,

ich kann dir nicht ganz folgen. Von welcher Zeile 34 sprichst du? Meinst du den Code im Video? Du hast mir einen etwas abgeänderten Code geschickt. Welchen soll ich nun nehmen?

VG
Kisska
AW: Info aus Outlook-Mails in Excel übertragen
Oberschlumpf
Hi,

da es nicht anders geht, als für dich punktgenau etwas zu programmieren, ist es erforderlich, dass du uns eine Bsp-eMail-Datei per Upload zeigst.
Ja, ich weiß, böse böse, dann würde man ja auch das sehen, was du geschwärzt hast.
Aber..geht ja nich anders, weil du es noch nich selbst hinbekommst, den schon gezeigten Code für deine Zwecke anzupassen.
Und grundsätzlich funktioniert auch der Code ganz zu Beginn aus dem Video - hab ich getestet!

Also, speicher in Outlook eine Mail mit dem Text, den du verarbeiten willst, als MSG-Datei (msg = Dateiendung, also speicher die Datei z Bsp unter dem Namen "Mail mit Text für Excel.msg").
Komprimier die msg-Datei z Bsp mit 7ZIP in eine ZIP-Datei, da hier im Forum msg-Dateien nicht per Upload gezeigt werden können.
Aber die ZIP-Datei kannst du dann per Upload zeigen.
Und wir (vllt nur noch ich) passen den Code dann an die von dir gezeigte Mail-Datei (msg-Format) an.

Wenn du meinst, das geht nicht, dann bin ich wieder raus, weil...no file = no party

Ciao
Thorsten
AW: Info aus Outlook-Mails in Excel übertragen
schauan
Hallöchen,

den Haltepunkt kannst Du in dieser Zeile setzen:
Tabelle1.Cells(1, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr
Da hast Du das komplette Array. Oder du setzt ihn eine Zeile drüber bei Next OMAIL und hast dann schon bei der ersten Mail Zeit zum Nachschauen :-)
.