Nur E-Mailinhalte in Excel inportieren, die Exceldatei soll immer wieder mit den E-Mailinhalten ergänzt werden
Also ich bekomme regelmäßig E-Mails die immer den gleichen Absender haben deren Inhalt ich auswerte.
Folgendes würde mir viel Arbeit abnehemen wenn es möglich wäre diese E-Mail Inhalte in Excel in eine Tabelle zu importieren und diese Tabelle immer erweitern zu können, also alte Importe sollen bestehen bleiben und neue sollen sich anfügen.
Die EMails werden in einem separaten Ordner "Eskalation" in meinem Postfach gesendet.
Das ganze sollte funktionieren wenn ich z.B. die Exceldatei öffnen so das automatisch die E-mails importiert werden.
Verwendet wird Excel 07 sowie Outlook 07 mit Win XP
würde mich freuen über eine Lösung
Danke im Vorraus
utroger
Folgendes würde mir viel Arbeit abnehemen wenn es möglich wäre diese E-Mail Inhalte in Excel in eine Tabelle zu importieren und diese Tabelle immer erweitern zu können, also alte Importe sollen bestehen bleiben und neue sollen sich anfügen.
Die EMails werden in einem separaten Ordner "Eskalation" in meinem Postfach gesendet.
Das ganze sollte funktionieren wenn ich z.B. die Exceldatei öffnen so das automatisch die E-mails importiert werden.
Verwendet wird Excel 07 sowie Outlook 07 mit Win XP
würde mich freuen über eine Lösung
Danke im Vorraus
utroger
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 189654
Url: https://administrator.de/forum/nur-e-mailinhalte-in-excel-inportieren-die-exceldatei-soll-immer-wieder-mit-den-e-mailinhalten-ergaenzt-189654.html
Ausgedruckt am: 23.12.2024 um 07:12 Uhr
35 Kommentare
Neuester Kommentar
Hallo utroger!
Sollte durch eine Änderung der Codzeile
nach
möglich sein
Ferner würde ich den Dim für EMail auf Long ändern, ansonsten ist bei Zeile 32767 Schluss (Integer>=32768=Negativ=Error)
Gruß Dieter
Sollte durch eine Änderung der Codzeile
i = 0: Email = 0
i = 0: Email = Cells(Rows.Count, 1).End(xlUp).Row
Ferner würde ich den Dim für EMail auf Long ändern, ansonsten ist bei Zeile 32767 Schluss (Integer>=32768=Negativ=Error)
Gruß Dieter
[OT] @76109
Öhhmm.... ich habe mich ja eigentlich immer für relativ belastbar und halbwegs stressresistent gehalten....
Aber Hey! in der Liga kann ich nicht mitspielen.....
Wenn an meinen Mailaccount mehr als 32768 Mails gehen, die in den Unterordner "Eskalation" einsortiert werden...
... und meine größte Sorge ist: "Wie bekomme ich die sauber in eine Exceltabelle archiviert, damit mein Cheffe nicht denkt, ich mache gar nix mit diesen Eskalationen...."
RESPEKT!
Ich bin beeindruckt.
Grüße
Biber
[/OT]
Zitat von @76109:
Ferner würde ich den Dim für EMail auf Long ändern, ansonsten ist bei Zeile 32767 Schluss
(Integer>=32768=Negativ=Error)
Gruß Dieter
Ferner würde ich den Dim für EMail auf Long ändern, ansonsten ist bei Zeile 32767 Schluss
(Integer>=32768=Negativ=Error)
Gruß Dieter
Öhhmm.... ich habe mich ja eigentlich immer für relativ belastbar und halbwegs stressresistent gehalten....
Aber Hey! in der Liga kann ich nicht mitspielen.....
Wenn an meinen Mailaccount mehr als 32768 Mails gehen, die in den Unterordner "Eskalation" einsortiert werden...
... und meine größte Sorge ist: "Wie bekomme ich die sauber in eine Exceltabelle archiviert, damit mein Cheffe nicht denkt, ich mache gar nix mit diesen Eskalationen...."
RESPEKT!
Ich bin beeindruckt.
Grüße
Biber
[/OT]
[OT]@Biber
Eventuell habe ich mich mit einem Mailaufkommen von täglich 100-150 Stk. an 365 Tagen im Jahr etwas verschätzt
Gruß Dieter
[/OT]
RESPEKT!
Ich bin beeindruckt.
Ich ebenfallsIch bin beeindruckt.
Eventuell habe ich mich mit einem Mailaufkommen von täglich 100-150 Stk. an 365 Tagen im Jahr etwas verschätzt
Gruß Dieter
[/OT]
Moin utroger,
didi1954 war gestern etwas länger wach, deshalb ist er bestimmt noch beim Frühstück.
Ich versuch mal zu überbrücken:
Grüße
Biber
didi1954 war gestern etwas länger wach, deshalb ist er bestimmt noch beim Frühstück.
Ich versuch mal zu überbrücken:
...
Email = Cells(Rows.Count, 1).End(xlUp).Row
'Selbst wenn "Email" hier das denkbare Minimum 0 ist
....
Email = Email + 1
' ... ist "Email" hier dann 0+1 = 1
Cells(Email + 1, 1).Value = .Body
' und hier wird in Cells( 1 + 1,..), also 2 geschrieben
...
Grüße
Biber
Hallo utroger, Hallo Biber!
@Biber
@utroger
Biber hat sicherlich damit gerechnet, dass Du anhand seiner Erklärung von selbst draufkommst.
Daraus ergibt sich:
@Biber
Gibt als kleinsten Wert immer 1 zurück, egal ob Leer/Inhalt
Gruß Dieter
@Biber
didi1954 war gestern etwas länger wach, deshalb ist er bestimmt noch beim Frühstück.
Den ersten Kaffee habe ich schon geschafft@utroger
Biber hat sicherlich damit gerechnet, dass Du anhand seiner Erklärung von selbst draufkommst.
'=Nächste freie Zeile
Email = Email + 1
'=Nächste freie Zeile nochmal + 1, also übernächste freie Zeile
Cells(Email + 1, 1).Value = .Body
'=Nächste freie Zeile
Cells(Email, 1).Value = .Body
@Biber
Cells(Rows.Count, 1).End(xlUp).Row
Gruß Dieter
Hallo,
ich Administriere eine Fussballschule und betreue auch die Webseite. Die Anmeldungen der Kinder erfolgen über ein Online-Formular über Wordpress und die Anmeldungsemail hat immer den gleichen Aufbau mit Name, Adresse, Alter, Trikotgröße, Spielerposition usw.
z.B.: http://www.fussballschule-renchtal.de/anmeldeformular-kehl-auenheim-1-k ...
Diese Mails werden in Outlook abgerufen und die Inhalte dann händisch in eine Excel-Tabelle überführt. Der Ideallösung wäre natürlich, die Inhalte automatisiert zu übertragen.
Ich kenne mich zwar am MAC perfekt aus , nur leider ist Outlook so gar nicht mein Spezialgebiet. Wäre es zuviel verlangt wenn Sie mir grob aufzeigen würden, was ich wo und wie aktivieren muss, um Ihr Makro auch für mich nutzbar zu machen?
Vielen Dank vorab und Grüße
Arndt
ich Administriere eine Fussballschule und betreue auch die Webseite. Die Anmeldungen der Kinder erfolgen über ein Online-Formular über Wordpress und die Anmeldungsemail hat immer den gleichen Aufbau mit Name, Adresse, Alter, Trikotgröße, Spielerposition usw.
z.B.: http://www.fussballschule-renchtal.de/anmeldeformular-kehl-auenheim-1-k ...
Diese Mails werden in Outlook abgerufen und die Inhalte dann händisch in eine Excel-Tabelle überführt. Der Ideallösung wäre natürlich, die Inhalte automatisiert zu übertragen.
Ich kenne mich zwar am MAC perfekt aus , nur leider ist Outlook so gar nicht mein Spezialgebiet. Wäre es zuviel verlangt wenn Sie mir grob aufzeigen würden, was ich wo und wie aktivieren muss, um Ihr Makro auch für mich nutzbar zu machen?
Vielen Dank vorab und Grüße
Arndt
Hallo,
vielen Dank. Ich werde dies ebenfalls an einem Windowas Rechner installieren wollen ... und eben das ist mein Problem. Ich bin in der Mac-Welt zu Hause ... ich brauche eher Hilfe auf der PC-Seite.
Also, ich gehe also unter Outlook/Extras/Makros und erstelle mit dem genannten Code ein Makro, korrekt?
Aber wie und wo weise ich dieses Makro dem gewünschten Posteingang zu? Und wie stelle ich die "Verbindung" zur Excel-Liste her?
Braucht die Excel-Liste einen bestimmten Dateinamen?
Danke vorab und Grüße
Arndt
vielen Dank. Ich werde dies ebenfalls an einem Windowas Rechner installieren wollen ... und eben das ist mein Problem. Ich bin in der Mac-Welt zu Hause ... ich brauche eher Hilfe auf der PC-Seite.
Also, ich gehe also unter Outlook/Extras/Makros und erstelle mit dem genannten Code ein Makro, korrekt?
Aber wie und wo weise ich dieses Makro dem gewünschten Posteingang zu? Und wie stelle ich die "Verbindung" zur Excel-Liste her?
Braucht die Excel-Liste einen bestimmten Dateinamen?
Danke vorab und Grüße
Arndt
Hallo,
ok, verstanden.
Habe nun in Excel den Code in ein Makro kopiert. Dann den Haken bei Microsoft Outlook 12 Objekt Libary gesetzt.
Wenn ich nun MAKRO AUSFÜHREN klicke, dann springt er in den Editor und gibt FEHLER BEIM KOMPILIEREN/BENUTZERDEFINIERTER TYP NICHT DEFINIERT aus. Gleichzeitig markiert er diese Zeile gelb: Sub OutlookPosteingang()
und diese blau: OLF As Outlook.MAPIFolder
In Outlook heißt mein Posteingang: INBOX
Ich hoffe Sie haben noch etwas Geduld.
Danke und Gruß
Arndt
ok, verstanden.
Habe nun in Excel den Code in ein Makro kopiert. Dann den Haken bei Microsoft Outlook 12 Objekt Libary gesetzt.
Wenn ich nun MAKRO AUSFÜHREN klicke, dann springt er in den Editor und gibt FEHLER BEIM KOMPILIEREN/BENUTZERDEFINIERTER TYP NICHT DEFINIERT aus. Gleichzeitig markiert er diese Zeile gelb: Sub OutlookPosteingang()
und diese blau: OLF As Outlook.MAPIFolder
In Outlook heißt mein Posteingang: INBOX
Ich hoffe Sie haben noch etwas Geduld.
Danke und Gruß
Arndt
Hallo arndtk!
Gruß Dieter
Wenn ich nun MAKRO AUSFÜHREN klicke, dann springt er in den Editor und gibt FEHLER BEIM KOMPILIEREN/BENUTZERDEFINIERTER TYP NICHT DEFINIERT aus. Gleichzeitig markiert er diese Zeile gelb: Sub OutlookPosteingang()
Diese Zeile ist gelb markiert, weil der Debugger aufgrund des Fehlers in der Folgezeile, an dieser Stelle stehen bleibt. D.h. diese Zeile ist OK und diese blau: OLF As Outlook.MAPIFolder
Stellt sich die Frage, ob Du unter Verweise den Haken gesetzt und mit OK bestätigst hast? Also Verweise erneut öffnen und nachsehen, ob die Outlook-Lib am Anfang mit Haken steht...Gruß Dieter
Hallo zusammen,
es klappt! Super! Vielen Dank nochmals für Eure Hilfe, toll!!
Die Umstellung auf INBOX hat geholfen!
Außerdem hatte ich die Office-Lib und nicht die Outlook-Lib aktiviert.
Nun aber noch eine Frage. Es werden nun die kompletten Email-Inhalte importiert. Hätte ich auch die Möglichkeit, nur bestimmte Inhalte aus den Mails zu importieren?
Mir geht es hauptsächlich um den Namen, die Anschrift, Trikot-Größe und die Email-Adresse. Diese Infos werden über ein Wordpress-Plugin in einem Formular erfasst und dann als eine Anmeldung per Mail versendet.
Aber nochmal ... vielen Dank für Eure Geduld und Hilfe!!
Gruß
Arndt
es klappt! Super! Vielen Dank nochmals für Eure Hilfe, toll!!
Die Umstellung auf INBOX hat geholfen!
Außerdem hatte ich die Office-Lib und nicht die Outlook-Lib aktiviert.
Nun aber noch eine Frage. Es werden nun die kompletten Email-Inhalte importiert. Hätte ich auch die Möglichkeit, nur bestimmte Inhalte aus den Mails zu importieren?
Mir geht es hauptsächlich um den Namen, die Anschrift, Trikot-Größe und die Email-Adresse. Diese Infos werden über ein Wordpress-Plugin in einem Formular erfasst und dann als eine Anmeldung per Mail versendet.
Aber nochmal ... vielen Dank für Eure Geduld und Hilfe!!
Gruß
Arndt
Hallo utroger,
folgenden Inhalt habe ich nun vorliegen:
Camp vom 25. Juli – 27.Juli 2013 in Ebersweier - 1 Kind
Angaben der Eltern
Vor- und NachnameMaxMustermann
Straße Musterstrasse 12
PLZ 77770
OrtMusterstadt
Telefon (idealerweise Ihre Mobilnummer)01234/123466
E-Mail HYPERLINK "ma
Ich habe den Hinweis bzgl. evtl. Mehrkosten beim Besuch des Kinderzentrums und des Dietmar-Hopp-Stadions von 1899 Hoffenheim gelesen und stimme ihm zu. ✔
Bestätigung der HYPERLINK "http://www.fussballschule-renchtal.de/?page_id=260" \nAllg. Geschäftsbedingungen. ✔
Angaben zum Kind
Vor- und NachnamePeter Mustermann
Geburtsdatum11.12.13
Bist Du Mitglied im Sparkassen-KNAX-Club der Sparkasse Offenburg? Ja
Bist Du Mitglied im S-Club der Sparkasse Offenburg? Nein
Spielst Du schon in einem Verein? Ja
Wenn ja, in welchem? TUS Durbach
Welche Position? Stürmer
Muss Ihr Kind Medikamente einnehmen Nein
Wenn ja, welche und wie oft?
Angaben zum Trikot
Größe M 140-152
Rückenbeschriftung mit Namen (Zusatzkosten von 5 Euro) Ja
Wenn ja, welcher Name?Max
Stutzengröße
Stutzengröße entspricht der Schuhgröße 35 - 38
Sonstige Fragen
Wie sind Sie/bist Du auf uns aufmerksam geworden? Homepage FVE Ebersweier
Sicherheitsabfrage
Bitte geben Sie folgende Ziffern ein: b2ik
Könnten Sie mir evtl. eine Beispielformel erstellen? Dann würde ich mir diese als Vorlage nehmen und die benötigten Felder selber anlegen.
DANKE!!!
Gruß
Arndt
folgenden Inhalt habe ich nun vorliegen:
Camp vom 25. Juli – 27.Juli 2013 in Ebersweier - 1 Kind
Angaben der Eltern
Vor- und NachnameMaxMustermann
Straße Musterstrasse 12
PLZ 77770
OrtMusterstadt
Telefon (idealerweise Ihre Mobilnummer)01234/123466
E-Mail HYPERLINK "ma
Ich habe den Hinweis bzgl. evtl. Mehrkosten beim Besuch des Kinderzentrums und des Dietmar-Hopp-Stadions von 1899 Hoffenheim gelesen und stimme ihm zu. ✔
Bestätigung der HYPERLINK "http://www.fussballschule-renchtal.de/?page_id=260" \nAllg. Geschäftsbedingungen. ✔
Angaben zum Kind
Vor- und NachnamePeter Mustermann
Geburtsdatum11.12.13
Bist Du Mitglied im Sparkassen-KNAX-Club der Sparkasse Offenburg? Ja
Bist Du Mitglied im S-Club der Sparkasse Offenburg? Nein
Spielst Du schon in einem Verein? Ja
Wenn ja, in welchem? TUS Durbach
Welche Position? Stürmer
Muss Ihr Kind Medikamente einnehmen Nein
Wenn ja, welche und wie oft?
Angaben zum Trikot
Größe M 140-152
Rückenbeschriftung mit Namen (Zusatzkosten von 5 Euro) Ja
Wenn ja, welcher Name?Max
Stutzengröße
Stutzengröße entspricht der Schuhgröße 35 - 38
Sonstige Fragen
Wie sind Sie/bist Du auf uns aufmerksam geworden? Homepage FVE Ebersweier
Sicherheitsabfrage
Bitte geben Sie folgende Ziffern ein: b2ik
Könnten Sie mir evtl. eine Beispielformel erstellen? Dann würde ich mir diese als Vorlage nehmen und die benötigten Felder selber anlegen.
DANKE!!!
Gruß
Arndt
Ich nochmal.
Ein Problem gibt es leider noch. Der Email-Inhalt wird mit dem Makro in EIN Feld übertragen. D.h., alle oben geposteten Inhalte stehen in z.B. A1.
Kann man diese noch per Befehl "aufteilen" lassen? Ich kenne das nur aus InDesign ... nach jedem RETURN ein Feld weiterspringen. Geht sowas auch in Excel?
Oder müsste sogar das Makro angepasst werden?
Grüße
Arndt
Ein Problem gibt es leider noch. Der Email-Inhalt wird mit dem Makro in EIN Feld übertragen. D.h., alle oben geposteten Inhalte stehen in z.B. A1.
Kann man diese noch per Befehl "aufteilen" lassen? Ich kenne das nur aus InDesign ... nach jedem RETURN ein Feld weiterspringen. Geht sowas auch in Excel?
Oder müsste sogar das Makro angepasst werden?
Grüße
Arndt
Hallo arndtk!
Wenn ich das richtig sehe, dann bekommst Du die Emails im HTML-Format. Von daher müsste der Email-Quelltext Table-Tags (<table>) enthalten. Wenn dem so ist, dann speichere zu Testzwecken in Outlook eine Mail als HTML-Datei per 'Datei>Speichern unter'. Anschließend öffnest Du Excel mit einer neuen Arbeitsmappe und importierst diese Datei per 'Datei>Externe Daten importieren>Daten importieren'. Damit solltest Du eine vernünftige Datenansicht erhalten und ein entsprechendes Feedback geben...
Gruß Dieter
Wenn ich das richtig sehe, dann bekommst Du die Emails im HTML-Format. Von daher müsste der Email-Quelltext Table-Tags (<table>) enthalten. Wenn dem so ist, dann speichere zu Testzwecken in Outlook eine Mail als HTML-Datei per 'Datei>Speichern unter'. Anschließend öffnest Du Excel mit einer neuen Arbeitsmappe und importierst diese Datei per 'Datei>Externe Daten importieren>Daten importieren'. Damit solltest Du eine vernünftige Datenansicht erhalten und ein entsprechendes Feedback geben...
Gruß Dieter
Hallo Dieter,
danke für den Hinweis. Auf diesem Wege erhalte ich eine strukturierte Datei mit den Angaben in einzelnen Feldern.
Name = B1
Strasse = B2
usw.
Jetzt stellt sich mir natürlich die Frage, wie ich diesen Schritt automatisiert hinbekomme? Oder muss ich das gar nicht?
Ich stehe auf'm Schlauch?
@utroger: Auch hier vielen Dank ... dieser Vorschlag hört sich plausibel an.
Ich warte mal was Dieter schreibt, ggf. gibt es ja noch eine andere Lösung.
Vielen Dank (wie immer!) und ein schönes Wochenende
Arndt
danke für den Hinweis. Auf diesem Wege erhalte ich eine strukturierte Datei mit den Angaben in einzelnen Feldern.
Name = B1
Strasse = B2
usw.
Jetzt stellt sich mir natürlich die Frage, wie ich diesen Schritt automatisiert hinbekomme? Oder muss ich das gar nicht?
Ich stehe auf'm Schlauch?
@utroger: Auch hier vielen Dank ... dieser Vorschlag hört sich plausibel an.
Ich warte mal was Dieter schreibt, ggf. gibt es ja noch eine andere Lösung.
Vielen Dank (wie immer!) und ein schönes Wochenende
Arndt
Hallo Arndt!
Bei meinem Vorschlag dachte ich schon an eine Automatisierung, aber um dies so einfach wie möglich zu machen, wollte ich zunächst erstmal wissen, ob Du mit einer Html-Datei eine saubere Struktur erhälst
Nun wäre noch die Frage zu klären, ob Du alle Daten in der Excel-Datei haben möchtest oder eventuell nur Eckdaten mit einem Link auf diejenige Html-Datei. Also eine Art Html-Archivierung...
Ansonsten benötige ich eine genaue Zellfolge der Html-Tabelle, wobei ich mal annehme, dass die Zeile 1 in der Daten-Tabelle eine Überschriftzeile ist und die Daten ab Zeile 2 Spalte A beginnen.
Die Html-Zellfolge hätte ich dann gerne im Format "B1,B2,...". Falls Du Zelleninhalte zusammenfügen möchtest, also z.B. Zelle D1 + Leerzeichen + Zelle D2, dann schreibe im Format "B1,B2,D1+D2,..."
Außerdem könntest Du noch etwas über den Ablauf erzählen z.B.:
Befinden sich in diesem Posteingangs-Ordner auch noch andere Mails außer Anmeldungen?
Werden die Mails nach dem Excel-Import im Posteingangs-Ordner gelöscht bzw. sollen sie beim Import automatisch gelöscht werden...?
Hoffe Du hast das soweit alles verstanden?
Gruß Dieter
PS. Wäre nicht schlecht, wenn Du Dir eine Mustermann-Anmeldung zusendest und mir den Quelltext per PN zuschickst, damit ich gegebenenfalls auf Formate (Häkchen...?) Einfluss nehmen kann.
Bei meinem Vorschlag dachte ich schon an eine Automatisierung, aber um dies so einfach wie möglich zu machen, wollte ich zunächst erstmal wissen, ob Du mit einer Html-Datei eine saubere Struktur erhälst
Nun wäre noch die Frage zu klären, ob Du alle Daten in der Excel-Datei haben möchtest oder eventuell nur Eckdaten mit einem Link auf diejenige Html-Datei. Also eine Art Html-Archivierung...
Ansonsten benötige ich eine genaue Zellfolge der Html-Tabelle, wobei ich mal annehme, dass die Zeile 1 in der Daten-Tabelle eine Überschriftzeile ist und die Daten ab Zeile 2 Spalte A beginnen.
Die Html-Zellfolge hätte ich dann gerne im Format "B1,B2,...". Falls Du Zelleninhalte zusammenfügen möchtest, also z.B. Zelle D1 + Leerzeichen + Zelle D2, dann schreibe im Format "B1,B2,D1+D2,..."
Außerdem könntest Du noch etwas über den Ablauf erzählen z.B.:
Befinden sich in diesem Posteingangs-Ordner auch noch andere Mails außer Anmeldungen?
Werden die Mails nach dem Excel-Import im Posteingangs-Ordner gelöscht bzw. sollen sie beim Import automatisch gelöscht werden...?
Hoffe Du hast das soweit alles verstanden?
Gruß Dieter
PS. Wäre nicht schlecht, wenn Du Dir eine Mustermann-Anmeldung zusendest und mir den Quelltext per PN zuschickst, damit ich gegebenenfalls auf Formate (Häkchen...?) Einfluss nehmen kann.
Hallo Arndt!
Hier mal der Code mit Bezug auf Deine PN...
Schritt 1:
Es werden 2 Tabellenblätter benötigt. Das 1. z.B. mit Namen 'Anmeldungen' und das 2. mit dem Namen 'Temp'. Das 2. Tabellenblatt (Temp)' kannst/solltest Du beim späteren Gebrauch ausblenden.
Schritt 2:
Falls vorhanden, dann lösche im VBA-Editor im Tabellenblatt 'Anmeldungen' den Inhalt und füge anschließend den Quellcode in das Tabellenblatt ein.
Schritt 3:
Sicherstellen, das die Tabellenblatt-Namen mit den Konstanten 'SheetData' und 'SheetTemp' im VBA-Code übereinstimmen.
Schritt 4:
Die Konstante 'RowStart' im VBA-Code die Zeilennummer für die Startzeile angeben. Wenn Du z.B. in der Zeile 1 eine Befehlsschaltfläche (CommandButton) einfügst und in Zeile 3 Deine Spaltenüberschriften stehen, dann wäre die Startzeile die Zeile darunter, also Zeile 4, ab der die Daten eingetragen werden...
Wenn Du nicht weißt, wie das Einfügen eines CommandButtons funktioniert, dann frage nach...
Schritt 5:
Wähle im Menü Debuggen>Kompilieren. Der Code ist OK, sofern keine Fehlermeldung ausgegeben wird.
Schritt 6:
Eventuell vor diesem Schritt erst einmal den unteren Teil zum Programmablauf durchlesen?
Wenn kein Command-Button eingefügt ist, dann den Text-Cursor vor folgende Zeile setzen
und anschließend den blauen Abspiel-Button oder F5-Taste betätigen...
Schritt 7:
Die Daten-Spalten Deinen Wünschen entsprechend formatieren...
Soweit so gut, hoffe ich zumindest?
Und keine Angst wegen den Emails, die bleiben erst einmal alle erhalten!
Nun zum eigentlich Programmablauf:
Zunächst wird der Pfad der Arbeitsmappe ermittelt und falls noch nicht vorhanden, der Unterordner 'Archiv' für die die Email-Htm-Dateien angelegt.
Anschließend werden alle Outlook-Mails im Posteingang durchforstet und die Emails mit der Betreffzeile 'Anmeldung zum Camp', als Htm-Datei im Ordner 'Archiv' gespeichert. Danach werden die Htm-Dateien in das Sheet 'Temp' importiert und die jeweilige Daten in das Sheet 'Anmeldungen' eingetragen, wobei in der letzten Spalte, der Dateiname der Htm-Datei steht. Bei erfolgreichem Import, werden die Emails im Posteingang gelöscht, sofern in Codezeile 78 am Zeilenanfang das Kommentarzeichen (') nach der Testphase entfernt wurde. War der Import dagegen nicht erfolgreich, dann bleibt die Email im Posteingang erhalten und die Htm-Datei wird gelöscht. Am Ende wird eine entsprechende Meldung ausgegeben...
Sofern sich im Posteingang Emails mit der entsprechenden Betreffzeile befinden, kannst Du den Code zu Testzwecken mehrfach durchlaufen lassen, um zu sehen, wie die jeweiligen Daten erfasst und die Htm-Dateien im Ordner 'Archiv' erstellt werden.
Nach dem beenden der Testphase und der tatsächlichen Nutzung des Email-Imports, müssen zuvor folgende Schritte ausgeführt werden:
Die Daten im Sheet 'Anmeldungen' entfernen.
Die Htm-Dateien im Ordner 'Archiv' löschen.
In Codezeile 78 das Kommentarzeichen (') am Zeilenanfang entfernen. Danach werden die Emails bei erfolgreichem Import im Posteingang gelöscht
Gruß Dieter
Hier mal der Code mit Bezug auf Deine PN...
Option Explicit
Option Compare Text
Private Const RowStart = 4 'Ab Zeile 4 Anmeldungen eintragen
Private Const SheetData = "Anmeldungen" 'Tabellenname Anmeldedaten
Private Const SheetTemp = "Temp" 'Tabellenname Htm-Import
Private Const MailsSubject = "*Anmeldung zum Camp*"
Private Const HtmDataCells = "A8,A9," & _
"B10,B11,B12,B13,B14,B15," & _
"A18," & _
"B19,B20,B21,B22,B23,B24,B25,B26,B27," & _
"A28," & _
"B29,B30,B31," & _
"A32," & _
"B33,B34,B35,B36,B37,B38,B39,B40,B41," & _
"A42," & _
"B43,B44,B45"
Private Const Msg1 = "Keine Emails im Posteingang gefunden!"
Private Const Msg2 = "Es wurden %1 neue Emails importiert!"
Private Const Err1 = "Der Email-Import ist bei %1 von %2 Emails fehlgeschlagen!"
Private Sub CommandButton1_Click()
Dim oOL As Outlook.Application, oMails As Outlook.Items, oFso As Object, oMailList As Object
Dim sKey As Variant, sFolderArchiv As String, sFileName As String
Dim iMailsCount As Integer, iRowNext As Long, i As Integer
'Archiv-Pfad für Htm-Dateien festlegen (Pfad Arbeitsmappe\Archiv)
sFolderArchiv = ThisWorkbook.Path & "\Archiv\"
'Set File-System
Set oFso = CreateObject("Scripting.FileSystemObject")
'Set assoziatives Array
Set oMailList = CreateObject("Scripting.Dictionary")
'Test ob der Archiv-Ordner schon existiert, ansonsten den Ordner neu erstellen
If oFso.FolderExists(sFolderArchiv) = False Then
oFso.CreateFolder sFolderArchiv
End If
'Set Outlook-Application
Set oOL = CreateObject("Outlook.Application")
'Set Mail-Items
Set oMails = oOL.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items
'Htm-Dateien mit Email-HtmlBody erstellen
For i = oMails.Count To 1 Step -1
'Test Betreff-Text Anmeldung
If oMails(i).Subject Like MailsSubject Then
'Htm-Dateipfad erzeugen
sFileName = GetFileName(sFolderArchiv, oMails(i).ReceivedTime)
'Mail-Item-Index als Key und Htm-Dateipfad als Item in File-Liste aufnehmen
oMailList.Add i, sFileName
'Htm-Datei erstellen
oFso.CreateTextFile(sFileName).Write oMails(i).HTMLBody
End If
Next
If oMailList.Count Then
'Nächste frei Zeile in Tabellenblatt ermitteln
iRowNext = Cells(Rows.Count, "A").End(xlUp).Row + 1
'Wenn die Tabelle noch keine Einträge hat, dann nächste freie Zeile ist Start-Zeile
If iRowNext < RowStart Then iRowNext = RowStart
'Anzahl Mails sichern
iMailsCount = oMailList.Count
'Htm-Dateien importieren
For Each sKey In oMailList.Keys
'Test ob Htm-Datei existiert
If oFso.FileExists(oMailList.Item(sKey)) Then
'Htm-Import True: Email in Posteingang löschen / Htm-Datei in File-Liste löschen
'Htm-Import False: Email in Posteingang nicht löschen / Htm-Datei in Archiv löschen
If GetMailDataImport(oMailList.Item(sKey), iRowNext) Then
'oMails(sKey).Delete 'Zum Löschen der Emails, Kommentarzeichen am Anfang entfernen
oMailList.Remove sKey
iRowNext = iRowNext + 1
Else
oFso.DeleteFile oMailList.Item(sKey)
End If
End If
Next
'Test ob alle Htm-Dateien importiert wurden? Entsprechende Meldung ausgegeben
If oMailList.Count Then
MsgBox Replace(Replace(Err1, "%1", oMailList.Count), "%2", iMailsCount), vbExclamation, "Fehler..."
Else
MsgBox Replace(Msg2, "%1", iMailsCount), vbInformation, "Hinweis..."
End If
'Temp-Sheet bereinigen
Call SheetTempCleanUp
Else
MsgBox Msg1, vbInformation, "Hinweis..."
End If
'Outlook.App beenden
oOL.Quit
End Sub
'Diese Funktion importiert die Htm-Dateien in's Temp-Sheet und schreibt die Daten in die Daten-Tabelle
Private Function GetMailDataImport(ByRef sFile, ByVal iRow As Long) As Boolean
Dim aDataCells As Variant, aDataPlus As Variant, aDataValues As Variant
Dim vValue As Variant, sQueryFile As String, i As Integer, p As Integer
'QueryTable-Connection-File definieren
sQueryFile = "FINDER;File:///" & Replace(sFile, "\", "/")
On Error Resume Next
'Import Htm-Datei
With Sheets(SheetTemp)
.UsedRange.Cells.Clear
With .QueryTables.Add(Connection:=sQueryFile, Destination:=.Range("A1"))
.AdjustColumnWidth = True
.WebSelectionType = xlAllTables
.WebFormatting = xlWebFormattingNone
.Refresh BackgroundQuery:=False
.Delete
End With
End With
'Test Import OK
If Err.Number = False Then
GetMailDataImport = True
'Htm-Zell-Adressen in Array splitten
aDataCells = Split(HtmDataCells, ",")
'Array für die Htm-Daten erzeugen
ReDim aDataValues(UBound(aDataCells) + 1)
'Htm-Daten ins Daten-Array schreiben
With Sheets(SheetTemp)
For i = 0 To UBound(aDataCells)
aDataPlus = Split(aDataCells(i), "+")
vValue = .Range(Trim(aDataPlus(0))).Value
For p = 1 To UBound(aDataPlus)
vValue = vValue & " " & .Range(Trim(aDataPlus(p))).Value
Next
aDataValues(i) = vValue
Next
End With
'Den Dateinamen der Htm-Datei dem Daten-Array hinzufügen
aDataValues(UBound(aDataValues)) = Dir(sFile)
'Daten-Array in die Daten-Tabelle übernehmen
Cells(iRow, "A").Resize(1, UBound(aDataValues) + 1).Value = aDataValues
Else
Err.Clear
End If
End Function
'Diese Function gibt den Dateipfad einer neuen Htm-Dateipfad zurück (Dateiname enthält das Empfangsdatum)
'Format: ArchivPfad + Jahr + Monat + Tag + 4-stellige fortlaufende Nummer ("..\Archiv\20130413_####.htm")
Private Function GetFileName(ByRef sFolder, ByVal dDate As Date) As String
Dim sName As String, sFileName As String, iCount As Integer
sName = sFolder & Year(dDate) & Right("0" & Month(dDate), 2) & Right("0" & Day(dDate), 2) & "_"
Do: iCount = iCount + 1
sFileName = sName & Right("000" & iCount, 4) & ".htm"
Loop Until Dir(sFileName) = ""
GetFileName = sFileName
End Function
'Diese Funktion entfernt Restfragmente der QueryTable-Importe und löscht die Zell-Inhalte im Temp-Sheet
Private Sub SheetTempCleanUp()
Dim oName As Name
For Each oName In ThisWorkbook.Names
If InStr(oName.Name, "ExterneDaten") > 0 Then oName.Delete
Next
Sheets(SheetTemp).UsedRange.Cells.Clear
End Sub
Schritt 1:
Es werden 2 Tabellenblätter benötigt. Das 1. z.B. mit Namen 'Anmeldungen' und das 2. mit dem Namen 'Temp'. Das 2. Tabellenblatt (Temp)' kannst/solltest Du beim späteren Gebrauch ausblenden.
Schritt 2:
Falls vorhanden, dann lösche im VBA-Editor im Tabellenblatt 'Anmeldungen' den Inhalt und füge anschließend den Quellcode in das Tabellenblatt ein.
Schritt 3:
Sicherstellen, das die Tabellenblatt-Namen mit den Konstanten 'SheetData' und 'SheetTemp' im VBA-Code übereinstimmen.
Schritt 4:
Die Konstante 'RowStart' im VBA-Code die Zeilennummer für die Startzeile angeben. Wenn Du z.B. in der Zeile 1 eine Befehlsschaltfläche (CommandButton) einfügst und in Zeile 3 Deine Spaltenüberschriften stehen, dann wäre die Startzeile die Zeile darunter, also Zeile 4, ab der die Daten eingetragen werden...
Wenn Du nicht weißt, wie das Einfügen eines CommandButtons funktioniert, dann frage nach...
Schritt 5:
Wähle im Menü Debuggen>Kompilieren. Der Code ist OK, sofern keine Fehlermeldung ausgegeben wird.
Schritt 6:
Eventuell vor diesem Schritt erst einmal den unteren Teil zum Programmablauf durchlesen?
Wenn kein Command-Button eingefügt ist, dann den Text-Cursor vor folgende Zeile setzen
Private Sub CommandButton1_Click() |
Schritt 7:
Die Daten-Spalten Deinen Wünschen entsprechend formatieren...
Soweit so gut, hoffe ich zumindest?
Und keine Angst wegen den Emails, die bleiben erst einmal alle erhalten!
Nun zum eigentlich Programmablauf:
Zunächst wird der Pfad der Arbeitsmappe ermittelt und falls noch nicht vorhanden, der Unterordner 'Archiv' für die die Email-Htm-Dateien angelegt.
Anschließend werden alle Outlook-Mails im Posteingang durchforstet und die Emails mit der Betreffzeile 'Anmeldung zum Camp', als Htm-Datei im Ordner 'Archiv' gespeichert. Danach werden die Htm-Dateien in das Sheet 'Temp' importiert und die jeweilige Daten in das Sheet 'Anmeldungen' eingetragen, wobei in der letzten Spalte, der Dateiname der Htm-Datei steht. Bei erfolgreichem Import, werden die Emails im Posteingang gelöscht, sofern in Codezeile 78 am Zeilenanfang das Kommentarzeichen (') nach der Testphase entfernt wurde. War der Import dagegen nicht erfolgreich, dann bleibt die Email im Posteingang erhalten und die Htm-Datei wird gelöscht. Am Ende wird eine entsprechende Meldung ausgegeben...
Sofern sich im Posteingang Emails mit der entsprechenden Betreffzeile befinden, kannst Du den Code zu Testzwecken mehrfach durchlaufen lassen, um zu sehen, wie die jeweiligen Daten erfasst und die Htm-Dateien im Ordner 'Archiv' erstellt werden.
Nach dem beenden der Testphase und der tatsächlichen Nutzung des Email-Imports, müssen zuvor folgende Schritte ausgeführt werden:
Die Daten im Sheet 'Anmeldungen' entfernen.
Die Htm-Dateien im Ordner 'Archiv' löschen.
In Codezeile 78 das Kommentarzeichen (') am Zeilenanfang entfernen. Danach werden die Emails bei erfolgreichem Import im Posteingang gelöscht
Gruß Dieter