Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Nur E-Mailinhalte in Excel inportieren, die Exceldatei soll immer wieder mit den E-Mailinhalten ergänzt werden

Frage Microsoft Microsoft Office

Mitglied: utroger

utroger (Level 1) - Jetzt verbinden

15.08.2012, aktualisiert 16.08.2012, 4311 Aufrufe, 35 Kommentare

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

35 Antworten
Mitglied: utroger
16.08.2012, aktualisiert um 15:18 Uhr
so ich bin nun schon ein Stück weiter
habe einen Code der zum Teil das erfüllt was ich will.

Was ich für diesen Code noch benötige ist das die importieren Inhalte in der Exceltabelle angehängt werden so das bereits enthaltene Inhalte bestehenbleiben.

Sub OutlookPosteingang()
Dim OLF As Outlook.MAPIFolder
Dim AnzEintraege As Integer, i As Integer, Email As Integer
Set OLF = GetObject("", "Outlook.Application") _
.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Folders("Unterordnername")
AnzEintraege = OLF.Items.Count
i = 0: Email = 0
While i < AnzEintraege
i = i + 1
Application.StatusBar = "Lese Posteingang " & _
Format(i / AnzEintraege, "0%")
With OLF.Items(i)
Email = Email + 1
Cells(Email + 1, 1).Value = .Body
End With
Wend
Set OLF = Nothing
End Sub

Wenn jetzt noch jemand die letzten Punkte ergänzen könnte?

Hinweis:
Wer diesen Code verwenden möchte muss beachten das der Code im Visual Basic Fenster unter Extras - Verweise der Verweis "Microsoft Outlook xxx Objekt Libary" noch auszuwählen ist (Hacken setzen), ansonsten funktioniert das nicht.
Dann noch den entsprechend Unterordnernamen hinter Folders eintragen, oder wenn direkt aus dem Posteingang importiert werden soll die .Folders("Unterordnername") weglassen

Diesen Code dann als Makro ausführen.

Danke
Gruß
utroger
Bitte warten ..
Mitglied: 76109
16.08.2012, aktualisiert um 18:55 Uhr
Hallo utroger!

Sollte durch eine Änderung der Codzeile
01.
i = 0: Email = 0
nach
01.
i = 0: Email = Cells(Rows.Count, 1).End(xlUp).Row
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
Bitte warten ..
Mitglied: Biber
16.08.2012, aktualisiert um 19:07 Uhr
[OT] @76109

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

Ö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]
Bitte warten ..
Mitglied: 76109
16.08.2012 um 23:17 Uhr
[OT]@Biber
RESPEKT!
Ich bin beeindruckt.
Ich ebenfalls

Eventuell habe ich mich mit einem Mailaufkommen von täglich 100-150 Stk. an 365 Tagen im Jahr etwas verschätzt

Gruß Dieter
[/OT]
Bitte warten ..
Mitglied: utroger
17.08.2012 um 07:21 Uhr
Hallo Dieter,

erstmal DANKE für deine Hilfe, jetzt werden die Inhalte angehängt.
Was mir jetzt erst aufgefallen ist, in die erste Zeile werden keine Daten geschrieben er fängt immer erst in der zweiten Zeile an, wo liegt hier mein Fehler.

Gruß utroger
Bitte warten ..
Mitglied: utroger
17.08.2012, aktualisiert um 07:25 Uhr
Hallo Biber,

also das Aufkommen der Emails in diesem Ordner beläuft sich im Jahr so etwa auf 2000 E-Mails, ohne die anderen 7000 E-Mails die sonst noch kommen im Jahr.

Gruß utroger
Bitte warten ..
Mitglied: Biber
17.08.2012, aktualisiert um 08:32 Uhr
Moin utroger,

didi1954 war gestern etwas länger wach, deshalb ist er bestimmt noch beim Frühstück.
Ich versuch mal zu überbrücken:
01.
... 
02.
Email = Cells(Rows.Count, 1).End(xlUp).Row  
03.
'Selbst wenn "Email" hier das denkbare Minimum 0 ist 
04.
 
05.
.... 
06.
Email = Email + 1  
07.
' ... ist "Email"  hier dann 0+1 = 1 
08.
 
09.
Cells(Email + 1, 1).Value = .Body  
10.
' und hier wird in Cells( 1 + 1,..), also 2 geschrieben 
11.
...
Grüße
Biber
Bitte warten ..
Mitglied: utroger
17.08.2012 um 08:41 Uhr
Hallo Biber,
so ganz bekomme ich das nicht hin das er mir keine Zeile frei lässt.
Ist es überhaupt möglich die EMailinhalte direkt in die nächste freie Zeile zu importieren.

Glaube ich habe es nicht ganz verstanden.

mit diesem Code lässt er immer 2 Zeilen frei

Sub OutlookPosteingang()
Dim OLF As Outlook.MAPIFolder
Dim AnzEintraege As Integer, i As Integer, Email As Integer
Set OLF = GetObject("", "Outlook.Application") _
.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Folders("Eskalation")
AnzEintraege = OLF.Items.Count
i = 0: Email = Cells(Rows.Count, 1).End(xlUp).Row
While i < AnzEintraege
i = i + 1
With OLF.Items(i)
Email = Email + 1
Cells(Email + 1, 1).Value = .Body
End With
Wend
Set OLF = Nothing
End Sub

Gruß utroger
Bitte warten ..
Mitglied: 76109
17.08.2012 um 09:55 Uhr
Hallo utroger, Hallo Biber!

@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.
01.
'=Nächste freie Zeile 
02.
Email = Email + 1 
03.
 
04.
'=Nächste freie Zeile nochmal + 1, also übernächste freie Zeile 
05.
Cells(Email + 1, 1).Value = .Body
Daraus ergibt sich:
01.
'=Nächste freie Zeile 
02.
Cells(Email, 1).Value = .Body
@Biber
01.
Cells(Rows.Count, 1).End(xlUp).Row
Gibt als kleinsten Wert immer 1 zurück, egal ob Leer/Inhalt

Gruß Dieter
Bitte warten ..
Mitglied: utroger
17.08.2012 um 10:38 Uhr
Hallo,
jetzt hab ichs.
Noch mal Danke für die Hilfe

Gruß utroger
Bitte warten ..
Mitglied: arndtk
08.04.2013 um 15:00 Uhr
Hallo utroger,

sind Sie hier noch aktiv? Ich bin auf der Suche nach genau dieser Lösung und bräuchte etwas Hilfe bzgl. der "Installation".

Gruß
Arndt
Bitte warten ..
Mitglied: utroger
08.04.2013 um 15:57 Uhr
ja bin noch aktiv, wie kann ich eventuell helfen, was genau ist das Problem?
Bitte warten ..
Mitglied: arndtk
08.04.2013 um 16:27 Uhr
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
Bitte warten ..
Mitglied: utroger
09.04.2013 um 07:19 Uhr
Also hier noch mal das Makro:

Wie das beim MAC ist mit Outlook hmmm..., denke wenn es so nicht klappt gibt es hirzu bestimmt jemanden der mit MAC helfen kann.

Sub OutlookPosteingang()
Dim OLF As Outlook.MAPIFolder
Dim AnzEintraege As Integer, i As Integer, Email As Integer
Set OLF = GetObject("", "Outlook.Application") _
.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Folders("Der Name in des Postfachs von Outlook")
AnzEintraege = OLF.Items.Count
i = 0: Email = Cells(Rows.Count, 1).End(xlUp).Row
While i < AnzEintraege
i = i + 1
With OLF.Items(i)
Email = Email + 1
Cells(Email + 1, 1).Value = .Body
End With
Wend
Set OLF = Nothing
End Sub



Hinweis:
Wer diesen Code verwenden möchte muss beachten das der Code im Visual Basic Fenster unter Extras - Verweise der Verweis "Microsoft Outlook xxx Objekt Libary" noch auszuwählen ist (Hacken setzen), ansonsten funktioniert das nicht.
Dann noch den entsprechend Unterordnernamen hinter Folders eintragen, oder wenn direkt aus dem Posteingang importiert werden soll die .Folders("Unterordnername") weglassen


wie gesagt ob bei Mac das auch so ist kann ich nicht sagen.
Gruß UT Roger
Bitte warten ..
Mitglied: arndtk
09.04.2013 um 08:42 Uhr
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
Bitte warten ..
Mitglied: utroger
09.04.2013 um 14:33 Uhr
Hallo,

nicht in Outlook sondern in Excel ein Macro. Weiter im (Excel) Visual Basic Fenster unter Extras - Verweise, der Verweis "Microsoft Outlook xxx Objekt Libary" noch auszuwählen ist (Hacken setzen). Die XXX stehen für die Version des Outlook

Den Posteingang

Folders("Den Name des Postfachs von Outlook") hier eintragen.

Das Makro wird dort ausgeführt in der Tabelle wo erstellt wird.
Also wenn in Tabelle1 dann wird das Makro in Tabelle 1 die Emaildaten einlesen.


Hoffe es ist verstanden
Bitte warten ..
Mitglied: arndtk
09.04.2013 um 15:56 Uhr
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
Bitte warten ..
Mitglied: utroger
10.04.2013, aktualisiert um 07:27 Uhr
Hallo,

denke jetzt nur noch Sub OutlookPosteingang()umbenennen in Sub OutlookInbox() dann sollte es funktionieren.
Daran denken wenn die E-Mails nicht in einem Unterordner sind dann "Folders("Der Name in des Postfachs von Outlook")" löschen.

Sollte das immer noch nicht funktionieren dann bitte @Biber anschreiben, er hat mir damals geholfen und er wird auch diese Problem lösen können.
Bitte warten ..
Mitglied: 76109
10.04.2013 um 09:54 Uhr
Hallo arndtk!

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
Bitte warten ..
Mitglied: arndtk
10.04.2013, aktualisiert um 11:34 Uhr
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
Bitte warten ..
Mitglied: utroger
11.04.2013 um 07:52 Uhr
Hallo,

also wie man geziehlt direkt aus dem E-Mail nur bestimmte Bereich exportiert kann ich nicht sagen.
Aber in Excel ist es kein Problem entsprechende Filterungen z.B. über Formeln auszulesen.
Diese würde dann z.B. so aussehen das die kpl. E-Mail in Tabbelle1 eingelesen wird und in Tabelle2 nur die bestimmten Bereich von Tabelle1 aufgeführt werden. Da es sich hier so wie beschrieben, immer um die gleichen Felder bzw. Positionen handelt sollte es keine Problem darstellen.

Wenns nicht klappen sollte einfach mal ein Beispiel posten und dann sehen wir weiter

Gruß utroger
Bitte warten ..
Mitglied: arndtk
11.04.2013 um 14:00 Uhr
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
Bitte warten ..
Mitglied: utroger
11.04.2013 um 14:12 Uhr
sind diese Angaben in Excel eingelesen oder ist das nur die E-Mail nicht in Excel eingelesen?
Bitte warten ..
Mitglied: arndtk
11.04.2013 um 14:14 Uhr
Doch, die sind so in Excel eingelesen!
Bitte warten ..
Mitglied: utroger
11.04.2013 um 14:24 Uhr
Das ganze könnte so aussehen in Tabelle2 wenn in Tabelle1 diese Felder die gewünschten informationen enthalten
Vor und Nachname Strasse PLZ Ort Trikot Größe E-Mail
=Tabelle1!A5 =Tabelle1!A7 =Tabelle1!A8 =Tabelle1!A10 =Tabelle1!A42 =Tabelle1!A14
Bitte warten ..
Mitglied: arndtk
11.04.2013 um 14:40 Uhr
Oh man, ich trau mich gar nicht weiter zu Fragen ...

Wo muss ich das dann eingeben? In Tabelle zwei? In welches Feld?

Sollten Sie mal Hilfe in InDesign, Photoshop, Illustrator benötigen...dann bitte melden

Gruß
Arndt
Bitte warten ..
Mitglied: utroger
11.04.2013, aktualisiert 12.04.2013
Aslo in Tabelle2 in das Feld z.B. A1 =Tabelle1!A5
Dies bedeutet das aus Tabelle1 das Feld A5 in Tabelle2 in das Feld A1 eingelesen wird
In diesem Fall, wenn also Vor und Nachname in Tabelle1 im Feld A5 steht wird der Vor und Nachname in Tablle2 in das Feld A1 eingelesen.
nach diesem Prinzip kann man sich die gewünschten Felder auswählen
Bitte warten ..
Mitglied: arndtk
11.04.2013 um 15:00 Uhr
Super, das habe ich verstanden!

Ich probiere es aus und melde mich zurück!

Danke!
Bitte warten ..
Mitglied: arndtk
11.04.2013 um 15:43 Uhr
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
Bitte warten ..
Mitglied: 76109
12.04.2013 um 01:50 Uhr
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
Bitte warten ..
Mitglied: utroger
12.04.2013, aktualisiert um 13:29 Uhr
Hallo,
eine Möglichkeit gibt es auch über eine Fromel die dann individuell anzupassen ist je nach dem was das Ergebnis bringen soll.
Hier ein Beispiel:
=TEIL(Tabelle1!A1;MAX(WENN(TEIL(Tabelle1!A1;SPALTE(1:1);1)="Nachname";SPALTE(1:1)))+18;99)
Diese Fromel sagt folgendes:
Such mir in Tabelle1 im Feld A1 das Wort Nachname und schreibe mir alles was rechts nach Nachname kommt in das Feld

Wobwei die +18 steht für den Beginn ab wie viel Zeichen der Wert aus Zelle A1 übernommen wird.

einfach mal ausprobieren, denke dann erklärt sich es von selbst
Dann für die nächsten Felder einfach die Formel anpassen

Gruß utroger
Bitte warten ..
Mitglied: arndtk
12.04.2013 um 16:42 Uhr
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
Bitte warten ..
Mitglied: 76109
13.04.2013, aktualisiert um 03:10 Uhr
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.
Bitte warten ..
Mitglied: arndtk
15.04.2013 um 23:09 Uhr
Hallo Dieter,

bin am WE leider nicht dazu gekommen. Melde mich schnellst möglich zurück ... !

Gruß
Arndt
Bitte warten ..
Mitglied: 76109
18.04.2013, aktualisiert 20.04.2013
Hallo Arndt!

Hier mal der Code mit Bezug auf Deine PN...
01.
Option Explicit 
02.
Option Compare Text 
03.
 
04.
Private Const RowStart = 4                  'Ab Zeile 4 Anmeldungen eintragen 
05.
 
06.
Private Const SheetData = "Anmeldungen"     'Tabellenname Anmeldedaten 
07.
Private Const SheetTemp = "Temp"            'Tabellenname Htm-Import 
08.
 
09.
Private Const MailsSubject = "*Anmeldung zum Camp*" 
10.
Private Const HtmDataCells = "A8,A9," & _ 
11.
                             "B10,B11,B12,B13,B14,B15," & _ 
12.
                             "A18," & _ 
13.
                             "B19,B20,B21,B22,B23,B24,B25,B26,B27," & _ 
14.
                             "A28," & _ 
15.
                             "B29,B30,B31," & _ 
16.
                             "A32," & _ 
17.
                             "B33,B34,B35,B36,B37,B38,B39,B40,B41," & _ 
18.
                             "A42," & _ 
19.
                             "B43,B44,B45" 
20.
 
21.
Private Const Msg1 = "Keine Emails im Posteingang gefunden!" 
22.
Private Const Msg2 = "Es wurden %1 neue Emails importiert!" 
23.
Private Const Err1 = "Der Email-Import ist bei %1 von %2 Emails fehlgeschlagen!" 
24.
 
25.
Private Sub CommandButton1_Click() 
26.
    Dim oOL As Outlook.Application, oMails As Outlook.Items, oFso As Object, oMailList As Object 
27.
    Dim sKey As Variant, sFolderArchiv As String, sFileName As String 
28.
    Dim iMailsCount As Integer, iRowNext As Long, i As Integer 
29.
     
30.
   'Archiv-Pfad für Htm-Dateien festlegen (Pfad Arbeitsmappe\Archiv) 
31.
    sFolderArchiv = ThisWorkbook.Path & "\Archiv\" 
32.
     
33.
   'Set File-System 
34.
    Set oFso = CreateObject("Scripting.FileSystemObject") 
35.
   'Set assoziatives Array 
36.
    Set oMailList = CreateObject("Scripting.Dictionary") 
37.
     
38.
   'Test ob der Archiv-Ordner schon existiert, ansonsten den Ordner neu erstellen 
39.
    If oFso.FolderExists(sFolderArchiv) = False Then 
40.
        oFso.CreateFolder sFolderArchiv 
41.
    End If 
42.
     
43.
   'Set Outlook-Application 
44.
    Set oOL = CreateObject("Outlook.Application") 
45.
   'Set Mail-Items 
46.
    Set oMails = oOL.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items 
47.
     
48.
   'Htm-Dateien mit Email-HtmlBody erstellen 
49.
    For i = oMails.Count To 1 Step -1 
50.
       'Test Betreff-Text Anmeldung 
51.
        If oMails(i).Subject Like MailsSubject Then 
52.
           'Htm-Dateipfad erzeugen 
53.
            sFileName = GetFileName(sFolderArchiv, oMails(i).ReceivedTime) 
54.
           'Mail-Item-Index als Key und Htm-Dateipfad als Item in File-Liste aufnehmen 
55.
            oMailList.Add i, sFileName 
56.
           'Htm-Datei erstellen 
57.
            oFso.CreateTextFile(sFileName).Write oMails(i).HTMLBody 
58.
        End If 
59.
    Next 
60.
     
61.
    If oMailList.Count Then 
62.
       'Nächste frei Zeile in Tabellenblatt ermitteln 
63.
        iRowNext = Cells(Rows.Count, "A").End(xlUp).Row + 1 
64.
         
65.
       'Wenn die Tabelle noch keine Einträge hat, dann nächste freie Zeile ist Start-Zeile 
66.
        If iRowNext < RowStart Then iRowNext = RowStart 
67.
         
68.
       'Anzahl Mails sichern 
69.
        iMailsCount = oMailList.Count 
70.
        
71.
       'Htm-Dateien importieren 
72.
        For Each sKey In oMailList.Keys 
73.
           'Test ob Htm-Datei existiert 
74.
            If oFso.FileExists(oMailList.Item(sKey)) Then 
75.
               'Htm-Import True: Email in Posteingang löschen / Htm-Datei in File-Liste löschen 
76.
               'Htm-Import False: Email in Posteingang nicht löschen / Htm-Datei in Archiv löschen 
77.
                If GetMailDataImport(oMailList.Item(sKey), iRowNext) Then 
78.
                    'oMails(sKey).Delete    'Zum Löschen der Emails, Kommentarzeichen am Anfang entfernen 
79.
                    oMailList.Remove sKey 
80.
                    iRowNext = iRowNext + 1 
81.
                Else 
82.
                    oFso.DeleteFile oMailList.Item(sKey) 
83.
                End If 
84.
            End If 
85.
        Next 
86.
        
87.
       'Test ob alle Htm-Dateien importiert wurden? Entsprechende Meldung ausgegeben 
88.
        If oMailList.Count Then 
89.
            MsgBox Replace(Replace(Err1, "%1", oMailList.Count), "%2", iMailsCount), vbExclamation, "Fehler..." 
90.
        Else 
91.
            MsgBox Replace(Msg2, "%1", iMailsCount), vbInformation, "Hinweis..." 
92.
        End If 
93.
         
94.
       'Temp-Sheet bereinigen 
95.
        Call SheetTempCleanUp 
96.
    Else 
97.
        MsgBox Msg1, vbInformation, "Hinweis..." 
98.
    End If 
99.
      
100.
   'Outlook.App beenden 
101.
    oOL.Quit 
102.
End Sub 
103.
 
104.
'Diese Funktion importiert die Htm-Dateien in's Temp-Sheet und schreibt die Daten in die Daten-Tabelle 
105.
Private Function GetMailDataImport(ByRef sFile, ByVal iRow As Long) As Boolean 
106.
    Dim aDataCells As Variant, aDataPlus As Variant, aDataValues As Variant 
107.
    Dim vValue As Variant, sQueryFile As String, i As Integer, p As Integer 
108.
     
109.
   'QueryTable-Connection-File definieren 
110.
    sQueryFile = "FINDER;File:///" & Replace(sFile, "\", "/") 
111.
                         
112.
    On Error Resume Next 
113.
     
114.
   'Import Htm-Datei 
115.
    With Sheets(SheetTemp) 
116.
        .UsedRange.Cells.Clear 
117.
         With .QueryTables.Add(Connection:=sQueryFile, Destination:=.Range("A1")) 
118.
            .AdjustColumnWidth = True 
119.
            .WebSelectionType = xlAllTables 
120.
            .WebFormatting = xlWebFormattingNone 
121.
            .Refresh BackgroundQuery:=False 
122.
            .Delete 
123.
        End With 
124.
    End With 
125.
     
126.
   'Test Import OK 
127.
    If Err.Number = False Then 
128.
        GetMailDataImport = True 
129.
         
130.
       'Htm-Zell-Adressen in Array splitten 
131.
        aDataCells = Split(HtmDataCells, ",") 
132.
     
133.
       'Array für die Htm-Daten erzeugen 
134.
        ReDim aDataValues(UBound(aDataCells) + 1) 
135.
     
136.
       'Htm-Daten ins Daten-Array schreiben 
137.
        With Sheets(SheetTemp) 
138.
            For i = 0 To UBound(aDataCells) 
139.
                aDataPlus = Split(aDataCells(i), "+") 
140.
                 
141.
                vValue = .Range(Trim(aDataPlus(0))).Value 
142.
                 
143.
                For p = 1 To UBound(aDataPlus) 
144.
                    vValue = vValue & " " & .Range(Trim(aDataPlus(p))).Value 
145.
                Next 
146.
                 
147.
                aDataValues(i) = vValue 
148.
            Next 
149.
        End With 
150.
         
151.
       'Den Dateinamen der Htm-Datei dem Daten-Array hinzufügen 
152.
        aDataValues(UBound(aDataValues)) = Dir(sFile) 
153.
         
154.
       'Daten-Array in die Daten-Tabelle übernehmen 
155.
        Cells(iRow, "A").Resize(1, UBound(aDataValues) + 1).Value = aDataValues 
156.
    Else 
157.
        Err.Clear 
158.
    End If 
159.
End Function 
160.
 
161.
'Diese Function gibt den Dateipfad einer neuen Htm-Dateipfad zurück (Dateiname enthält das Empfangsdatum) 
162.
'Format: ArchivPfad + Jahr + Monat + Tag + 4-stellige fortlaufende Nummer ("..\Archiv\20130413_####.htm") 
163.
Private Function GetFileName(ByRef sFolder, ByVal dDate As Date) As String 
164.
    Dim sName As String, sFileName As String, iCount As Integer 
165.
     
166.
    sName = sFolder & Year(dDate) & Right("0" & Month(dDate), 2) & Right("0" & Day(dDate), 2) & "_" 
167.
     
168.
    Do: iCount = iCount + 1 
169.
        sFileName = sName & Right("000" & iCount, 4) & ".htm" 
170.
    Loop Until Dir(sFileName) = "" 
171.
     
172.
    GetFileName = sFileName 
173.
End Function 
174.
 
175.
'Diese Funktion entfernt Restfragmente der QueryTable-Importe und löscht die Zell-Inhalte im Temp-Sheet 
176.
Private Sub SheetTempCleanUp() 
177.
    Dim oName As Name 
178.
    For Each oName In ThisWorkbook.Names 
179.
        If InStr(oName.Name, "ExterneDaten") > 0 Then oName.Delete 
180.
    Next 
181.
    Sheets(SheetTemp).UsedRange.Cells.Clear 
182.
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()
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
gelöst Excel: Text in Zellbereich prüfen mit Vergleichstext ggf. mit Exact-Funktion (5)

Frage von Michi1 zum Thema Microsoft Office ...

VB for Applications
Excel VBA Sortierung von Daten (5)

Frage von easy4breezy zum Thema VB for Applications ...

Microsoft Office
gelöst Excel-Formel oder VBA (7)

Frage von nicki01 zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...