Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
516to520
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
516to520
516to520
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Daten aus eMails in Excel automatisch übertragen?

Daten aus eMails in Excel automatisch übertragen?
12.11.2004 09:08:27
Sebastian
Hallo,
bin einer der vielen eBay-Usern, die sich gedanken machen, wie man sich den Rechnungsalltag erleichtern kann.
Da ich (mehr oder weniger) gute Excel-Kenntnise habe, möchte ich daher meine eigene Excel-Rechnung machen :)
Nun ist es so: von eBay bekommt man eine Bestätigungsmail von einem gekauften Artikel, diese wird im Outlook gespeichert. Um nicht ständig zwischen eMail und Excel zu switchen, und ständig STRG+C und STRG+V zu drücken, stelle ich mir die Frage, ob Excel selbst die Daten aus der eMail liest, und mir die fertige Rechnung ausspuckt.
Gibt es da irgendwelche Hilfe?
Desweiteren suche ich noch eine Formel, die mir bei jeder neuen Rechnung auch gleich die fortlaufende Rechnungsnummer ausspuckt.
Für viiiiiiel Hilfe wäre ich sehr dankbar :)

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

Betreff
Datum
Anwender
Anzeige
AW: Daten aus eMails in Excel automatisch übertragen?
12.11.2004 09:24:20
grumble
hi,
na das klingt vielleicht nach nem sehr interessanten groesseren projekt :)
hier ein paar gedanken dazu..
das hauptproblem ist wohl die mails auszulesen, die kann man einerseits als einzelne dateien speichern und dann oeffnen oder andererseits rauskopieren wie du beschrieben hast.
um das rauskopieren zu automatisieren muesstest du wohl mit dem windows-api rumprobieren auf das outlook zuzugreifen... da muesstest du dich belesen wie man auf andere anwendungen zugreift und dort inhalte herauskopiert...
falls du die mails einzeln speichern moechtest kannst du natuerlich auch automatisch alle oeffnen lassen (z.b. alle aus einem ordner)...
die fortlaufende rechnungsnummer ist sicher das geringste problem...
evtl. findest du tips zu aehnlichen projekten (halt nicht excel bezogen) auf www.delphipraxis.net
gruss
grumble
Anzeige
AW: Daten aus eMails in Excel automatisch übertragen?
12.11.2004 10:48:23
Sebastian
Ja, is das für Excel-Profis Interessant? :o)
Zuerst: Was ist Windows-Api? Ich glaube davon noch nichts gehört zu haben :)
Ich hab mein Outlook soweit modifiziert, das alle Auktionsende-eMails in einem Ordner (bei mir "!Verkauft") geschickt werden.
Die eMails werden ja nun automatisch in diesem Outlook-Ordner - irgendwo in den weiten des Laufwerkes "C" - gespeichert (ist kein Problem das rauszufinden, bin nur derzeit nicht an meinem Rechner).
Ich hab schonmal eine vorgeschriebene Excel-Datei im Internet gefunden (theoretisch perfekt auf mich zugeschnitten, doch da klappte leider nichts...) - da hätte man machen können: Adresse etc. von eMail nach Excel, Bestätigungsmail für Zahlungseingang usw.. Wäre ganz nett gewesen.
Und wie funktioniert das mit den Rg.Nr.?
Danke nochmals für deine Antwort :o)
Anzeige
AW: Daten aus eMails in Excel automatisch übertragen?
12.11.2004 10:55:24
grumble
dass die emails im outlookordner gespeichert sind ist richtig, es ist auch so, dass fuer jedes outlookverzeichnis eine datei existiert... da liegt aber der haken, denn diese datei ist leider gepackt (irgendson datenbankformat)... deshalb ist der weg ueber diese datei so nicht machbar, es sei denn es gibt n tool , das diese datei entpackt und alle enthaltenen mails in *.eml datein speichert...
( mir faellt grad ein, ich nutze outlook express und nicht outlook, ich weiss jetzt nicht inwieweit sich das ganze unterscheidet mit der speicherung...)
die excel datei, die du gefunden hast wuerde mich interessieren, wuerd ich mir gern mal anschaun, weisst du noch wo die liegt?
Anzeige
AW: Daten aus eMails in Excel automatisch übertragen?
12.11.2004 11:13:05
Sebastian
Hallo,
soweit ich weiß, werden die Ordner .dbx gespeichert (weißt es jetzt aber wirklich nicht, is nur so ein Gefühl...) und die eMails werden glaube auch als .eml gespeichert.
Würde es dann einfacher gehen? Falls nicht, frage ich meinen Bruder, der isn absoluter PC-Narr, der kennt da sicher ein Programm, was des entpackt.
Wegen der Adresse, würde ich dich bitten, mir deine eMail-Addy zu geben, da ich nicht weiß, ob ich es aus Datenrechtlichen Gründen hier posten darf.
Danke dir :)
AW: Daten aus eMails in Excel automatisch übertragen?
12.11.2004 11:24:53
grumble
grumble@gmx.ch
ich glaub auch es war .dbx
nunja wenn du die einzelnen .eml datein hast kannste die ja alle oeffnen lassen im excel und schon hast du dort alle rechnungen drinnen ... und dabei kannste auch = die nummer hochzaehlen lassen
Anzeige
AW: Daten aus eMails in Excel automatisch übertragen?
12.11.2004 11:32:38
Jens_M
Moin, moin!
Ich bearbeite meine EBAY-Mails auch mit Excel. Versand von Bestätigungsmails u. a. mit Kauf- und Verkaufsdaten zu Preisen, Portokosten, Bankverbindung usw. usw. läuft auf "Knopfdruck". Rechnungsnummern verwende ich nicht, aber hierzu gibt es was hier in der Forumsrecherche. Lediglich wie bei Dir auch kopiere ich noch einen Teil des Inhalts der Ebay-Bestätigungsmails noch in ein ges. Tabellenblatt, dessen Inhalt dort bereinigt und von meinem "Haupt"-Blatt dann ausgelesen wird. Diesen Umweg will ich mir auch ersparen und beabsichtige das direkte Auslesen der Mails von "end-of-auction...", da in der Betreff-Zeile ja die Artikel-Nummer steht. Aus Zeitgründen bin ich allerdings noch nicht dazu gekommen (und das Copy und Paste dauert ja auch nur einige Sekunden - aber bequemer wäre es natürlich!).
Hier habe ich was aus meinen Recherchen für Dich; weiß allerdings noch nichts über die konkrete Umsetzung zu unserem Problem:
Grüße,
JENS
****************************************************************
Outlook – Mailinhalt an Excel und Word übergeben

E-Mail-Inhalte ganz einfach an Excel und Word
uebergeben, Teil 1
---------------------------------------------
Versionen: Outlook, Word und Excel 2000 und 2002/XP
Haeufig moechten Sie Passagen aus E-Mails wie Adressen,
Produktinfos oder Preise in eine Excel-Tabelle oder ein
Word-Dokument uebernehmen. Die Zwischenablage ist dabei ein
oft genutzter Weg, der allerdings recht umstaendlich ist.
Unser zweiteiliger Tipp der Woche stellt eine "Ein-
Mausklick"-Loesung vor. Im ersten Teil vermitteln wir die
notwendigen Grundlagen, der zweite Teil zeigt dann die
komplette Realisierung eines entsprechenden Add-Ins fuer
Outlook.
Beginnen wir mit einer kleinen Betrachtung der speziellen
Problematik einer solchen Loesung. Zuerst einmal muessen Sie
auf die aktuell angezeigte Nachricht zugreifen koennen.
Outlook stellt zu diesem Zweck ein Objekt "Inspector" zur
Verfuegung, bei dem es sich einfach ausgedrueckt um ein
Fenster handelt, das ein Element aus einem Ordner anzeigt.
Der jeweils aktuelle Inspector laesst sich ueber die
Eigenschaft "Application.ActiveInspector" zum Beispiel wie
folgt ermitteln:
Dim objInsp As Inspector
Set objInsp = ActiveInspector
Die Objektvariable "objInsp" enthaelt anschliessend eine
Referenz auf den aktuellen Inspector, ueber dessen
Eigenschaften und Methoden Sie nun auf das jeweils
angezeigte Element, also beispielsweise eine Nachricht,
einen Termin, eine Aufgabe, einen Kontakt oder eine Notiz
zugreifen kann.
Dazu stellt das "Inspector"-Objekt die Eigenschaft
"CurrentItem" zur Verfuegung, die eine Referenz auf ein
Element des Typs des jeweiligen Ordners liefert. Beim
Posteingang waere dies ein Element vom Typ "olMailItem". Um
darauf zugreifen zu koennen, waere zum Beispiel eine
Initialisierung wie die folgende notwendig:
Dim objInsp As Inspector
Dim objMail As MailItem
Set objInsp = ActiveInspector
Set objMail = objInsp.CurrentItem
Die Objektvariable "objMail" enthaelt nun eine Referenz auf
die aktuelle Nachricht und erlaubt das Auslesen
verschiedener Eigenschaften wie zum Beispiel "Subject" fuer
die Betreffzeile oder "Body" fuer den Text der Nachricht.
Die folgenden Anweisungen geben beispielsweise in einer
Meldungsbox Betreffzeile und Nachrichtentext der aktuellen
Nachricht aus:
Dim objInsp As Inspector
Dim objMail As MailItem
Dim strSubj As String, strText As String
Set objInsp = ActiveInspector
Set objMail = objInsp.CurrentItem
strSubj = objMail.Subject
strText = objMail.Body
MsgBox strSubj & vbCrLf & vbCrLf & _
strText
Um markierten Text oder den kompletten Text einer Nachricht
zu uebernehmen, ist ein Zugriff auf die Eigenschaft "Body"
notwendig. Hier zeigt sich jedoch das naechste Problem: Wenn
Sie eine Nachricht anzeigen lassen, kann die Nachricht
unterschiedliche Formate haben. Je nach Format der Nachricht
zeigt Outlook verschiedene Bearbeitungs-Fenster an: Fuer das
Format "HTML" werden Komponenten des Internet Explorers fuer
die Anzeige herangezogen, fuer die Formate "RTF" und "Nur-
Text" verwendet Outlook einen einfachen, internen
Nachrichten-Editor. Etwas anders sieht es aus, wenn Word als
E-Mail-Editor eingestellt ist: Fuer HTML-E-Mails werden nach
wie vor Komponenten des Internet Explorers benutzt, fuer E-
Mails im Format "RTF" jedoch der WordMail-Editor und fuer
"Nur-Text"-E-Mails wird teilweise WordMail und teilweise der
interne, einfache Editor von Outlook verwendet. Warum
Outlook fuer "Nur Text" mal WordMail und mal den internen
Editor fuer die Anzeige verwendet, konnte anhand der
Dokumentation nicht geklaert werden. Es spielt fuer unsere
Loesung zunaechst auch keine besondere Rolle, wie wir weiter
unten sehen werden.
Abhaengig vom Format kommen also verschiedene Editoren
beziehungsweise Anzeige-Modi zum Einsatz. Diese lassen sich
mit Hilfe von zwei Eigenschaften des "Inspector"-Objektes
identifizieren: "EditorType" gibt zunaechst ueber das Format
Auskunft. Moegliche Werte sind hier "olEditorHTML",
"olEditorRTF", "olEditorText" und "olEditorWord". Ueber eine
"If...Then"-Abfrage wie die folgende kann man also zunaechst
das Format der aktuellen Nachricht ueberpruefen und
abhaengig davon reagieren:
If objInsp.EditorType = olEditorWord Then
...
ElseIf objInsp.EditorType = olEditorHTML Then
...
ElseIf objInsp.EditorType = olEditorRTF Then
...
ElseIf objInsp.EditorType = olEditorText Then
.....
End If
Der Wert "olEditorWord" sagt jedoch noch nicht aus, ob die
Nachricht auch tatsaechlich in Word angezeigt wird. Dazu
muss eine weitere Eigenschaft "IsWordMail" des "Inspector"-
Objektes abgefragt werden. Die oben gezeigte Konstruktion
sieht dann so aus:
If objInsp.IsWordMail And _
objInsp.EditorType = olEditorWord Then
.....
ElseIf objInsp.EditorType = olEditorHTML Then
.....
ElseIf objInsp.EditorType = olEditorRTF Then
.....
ElseIf objInsp.EditorType = olEditorText Then
.....
End If
Ist das Format der Nachricht und der Typ des gerade
verwendeten Editors geklaert, kann es daran gehen, die
aktuelle Markierung auszulesen. Hier lauern die naechsten
Probleme: Wenn eine Nachricht im internen Editor von Outlook
angezeigt wird, kann nur der komplette Nachrichtentext
ausgelesen werden, da das Objektmodell einen Zugriff auf
markierte Passagen in diesem Modus nicht unterstuetzt. Wird
die Nachricht hingegen im HTML-Modus oder in Word angezeigt,
sind verschiedene Methoden des Zugriffs auf Markierungen zu
verwenden, da zwei verschiedene Objektmodelle - das vom
Internet Explorer und das von Word - zum Einsatz kommen.
Gluecklicherweise stellt Outlook hier zwei Eigenschaften im
"Inspector"-Objekt zur Verfuegung, die eine Referenz
entweder auf das HTML- oder auf das Word-Dokument enthalten:
"HTMLEditor" liefert eine Referenz auf ein
"MSHTML.HTMLDocument" und "WordEditor" eine Referenz auf ein
"Word.Document". Mit dem Einsatz entsprechender
Objektvariablen dieser Datentypen koennen Sie dann mehr oder
weniger einfach auf die jeweilige Markierung in der HTML-
oder WordMail-Nachricht zugreifen.
Damit auf HTML- und Word-Dokumente zugegriffen werden kann,
sind zunaechst Verweise auf beide Objektmodelle zu setzen:
1. Wechseln Sie in Outlook mit Alt+F11 in die VBA-
Entwicklungsumgebung.
2. Waehlen Sie das Menue EXTRAS-VERWEISE an.
3. Setzen Sie eine Referenz auf "Microsoft Word x.0 Object
Library", wobei "x" fuer "9" bei Word 2000 und fuer "10"
bei Word 2002 steht.
4. Setzen Sie eine weitere Referenz auf "Microsoft HTML
Object Library".
Nun koennen Sie in Outlook-Loesungen zum Auslesen der
Markierungen entsprechende Objektvariablen und Eigenschaften
beziehungsweise Methoden nutzen. Das koennte in einer
kleinen Testroutine zum Beispiel wie folgt aussehen:

Sub Test()
Dim appWord As Word.Application
Dim objWORDDoc As Word.Document
Dim objHTMLDoc As MSHTML.HTMLDocument
Dim objRange As IHTMLTxtRange
Dim appExcel As Excel.Application
Dim objInsp As Inspector
Dim objMail As MailItem
Dim strText As String, strX As String
On Error Resume Next
Set objMail = Application.ActiveInspector.CurrentItem
If Err <> 0 Then
Beep
MsgBox "Das aktuelle Element ist keine Nachricht...", _
vbOKOnly + vbExclamation, "!!! Problem !!!"
Exit 

Sub
End If
Hier ermitteln wir zunaechst ueber
"ActiveInspector.CurrentItem" eine Referenz auf das aktuelle
Element, also auf die jeweils angezeigte Nachricht. Kommt es
dabei zu einem Fehler, ist das angezeigte Element keine
Nachricht. Wir zeigen eine entsprechende Meldung an und
verlassen die Routine dann.
Set objInsp = ActiveInspector
If objInsp.IsWordMail And objInsp.EditorType = olEditorWord
Then
Set objWORDDoc = objInsp.WordEditor
Set appWord = objWORDDoc.Parent
strText = appWord.Selection.Text
strX = "Word-Mail"
In diesem Bereich holen wir uns zunaechst ueber die
"Inspector"-Eigenschaft "WordEditor" eine Referenz auf das
Dokument in die Objektvariable "objWORDDoc". Deren
Eigenschaft "Parent" erlaubt einen Zugriff auf die
verwendete Word-Instanz, die wir in "appWord" ablegen.
Darueber laesst sich dann per "Selection.Text" der markierte
Text abfragen und in einer Variablen "strText" ablegen.
"strX" weisen wir einen "Identifizierer" fuer die spaetere
Anzeige einer kleinen Meldung zu - siehe unten.
ElseIf objInsp.EditorType = olEditorHTML Then
Set objHTMLDoc = objInsp.HTMLEditor
Set objRange = objHTMLDoc.Selection.createRange
strText = objRange.Text
strX = "HTML"
Dieser Bereich ist fuer HTML-Mails zustaendig: Zunaechst
setzen wir hier in die Objektvariable "objHTMLDoc" eine
Referenz auf das HTML-Dokument, die uns die "Inspector"-
Eigenschaft "HTMLEditor" liefert. Ein direkter Zugriff auf
eine Markierung ist hier noch nicht moeglich, dazu muss erst
ueber die Methode "createRange" ein "Range"-Objekt
initialisiert werden, dessen Eigenschaft "Text" uns dann
schliesslich den markierten Text liefert.
ElseIf objInsp.EditorType = olEditorRTF Then
strText = objMail.Body
strX = "RTF"
ElseIf objInsp.EditorType = olEditorText Then
strText = objMail.Body
strX = "TXT"
End If
Diese beiden Bereiche sind zustaendig fuer "RTF"- und "Nur
Text"-Mails, wenn Word nicht als E-Mail-Editor und/oder der
interne Outlook-Editor verwendet wird. Wie bereits
erlaeutert, ist hier ein Zugriff mangels Unterstuetzung
durch das Objektmodell nicht moeglich, so dass wir nur den
kompletten Text der Nachricht ueber die Eigenschaft "Body"
ermitteln koennen.
MsgBox strX & ": " & strText
End 

Sub
Abschliessend zeigen wir eine kleine Meldung an, die ueber
"strX" das identifizierte Format - "HTML", "Word-Mail",
"RTF", "TXT" - sowie den ausgelesenen Text anzeigt.
Wie Sie sehen, ist der Zugriff auf die aktuell angezeigte
Nachricht mit einigen Problemen verbunden, die sich aber im
Grossen und Ganzen recht einfach durch die Abfrage
entsprechender Eigenschaften loesen lassen. Aufbauend auf
diesen Grundlagen zeigt der zweite Teil des Tipps der Woche,
wie Sie die markierten, ausgelesenen Texte ueber ein dafuer
angelegtes Symbol in einer Symbolleiste in eine Excel-
Tabelle oder ein Word-Dokument einfuegen.
E-Mail-Inhalte ganz einfach an Excel und Word
uebergeben, Teil 2
Versionen: Outlook, Word und Excel 2000 und 2002
Im ersten Teil dieses Tipps der Woche waren wir auf die
Problematik beim Zugriff auf E-Mails per VBA eingegangen und
hatten verschiedene Zugriffsmethoden je nach Format der E-
Mail und der Art des verwendeten Editors - HTML-Editor,
Word-Mail, interner Outlook-Editor - aufgezeigt. Wir waren
damit in der Lage, markierte Passagen oder komplette E-Mails
auszulesen und in einer Variablen zur Verfuegung zu stellen.
Der zweite Teil zeigt nun aufbauend auf den im ersten Teil
vermittelten Grundlagen die Realisierung eines Add-Ins fuer
Outlook, das die Datenuebergabe an Excel oder Word
uebernimmt.
Bei Word ist zunaechst zu pruefen, ob Word als E-Mail-Editor
fuer Outlook definiert ist oder nicht. Diese Unterscheidung
erweist sich als recht problematisch: Bei dem Versuch, mit
"GetObject()" eine Referenz auf eine Instanz von Word zu
erhalten, wird generell die unsichtbar laufende WordMail-
Instanz als Ergebnis geliefert. Selbst wenn mehrere andere
Dokumente geoeffnet sind, ist ein gezielter Zugriff darauf
nicht moeglich, da Word die einzelnen Instanzen abkapselt.
Die einzig praktikable Loesung besteht darin, die "Tasks"-
Auflistung zu pruefen: Dort ist eine unsichtbar laufende
WordMail-Instanz mit dem Namen "Microsoft Word" und "Visible
= False" verzeichnet, waehrend Dokumente im Format
"Dokumentname - Microsoft Word" und "Visible = True"
festgehalten werden. Eine Pruefung wie die folgende erlaubt
dann beispielsweise die Aktivierung des ersten Dokumentes in
der Tasks-Auflistung:
For Each objTask In appWord.Tasks
If InStr(objTask.Name, "- Microsoft Word") <> 0 And _
objTask.Visible Then
objTask.Activate
SendKeys strText, True
bolFound = True
Exit For
End If
Next objTask
Da die Tasks-Auflistung keine verwertbare Referenz vom Typ
"Word.Application", sondern auch nur wieder einen Verweis
auf die unsichtbar laufende WordMail-Instanz liefert, kann
hier nur mit "SendKeys" gearbeitet und der selektierte Text
beziehungsweise die komplette Nachricht auf diesem Wege
quasi als simulierte Tastatureingabe in das Dokument
uebertragen werden.
In Verbindung mit Excel stellt sich dieses Problem nicht:
Entweder laeuft Excel bereits, so dass wir mit "GetObject()"
eine direkt verwertbare Referenz erhalten, oder es laeuft
nicht, so dass wir mit "CreateObject()" eine neue Instanz
starten koennen. Ueber die folgende Anweisung laesst sich
der selektierte Text beziehungsweise die komplette Nachricht
in die vorhandene, aktivierte Tabelle oder in eine
gegebenenfalls neu angelegte Arbeitsmappe einfuegen:
With appExcel
If .Workbooks.Count = 0 Then
.Workbooks.Add
End If
.Visible = True
.WindowState = xlMaximized
.Windows(0).Activate
.ActiveCell.Activate
.Selection = strText
End With
Um nun eine Loesung auf dieser Basis in Outlook einzubinden,
gehen Sie wie folgt vor:
1. Druecken Sie Alt+F11, um in die VBA-Entwicklungsumgebung
zu wechseln.
2. Waehlen Sie das Menue EXTRAS-VERWEISE an und setzen Sie
Referenzen auf "Microsoft HTML Object Library",
"Microsoft Word x.0 Object Library" und "Microsoft Excel
x.0 Object Library", wobei "x" fuer "9" (Word/Excel 2000)
beziehungsweise "10" (Word/Excel 2002) steht.
3. Geben Sie im VBA-Editor die folgende Prozedur
"SelWordExcel" ein. Bitte beachten Sie, dass wir
innerhalb des Listings Kommentare zur Erlaeuterung der
Funktionsweise eingefuegt haben, die Sie natuerlich nicht
eingeben koennen:

Sub SelWordExcel()
Dim appWord As Word.Application
Dim appExcel As Excel.Application
Dim objWORDDoc As Word.Document
Dim objHTMLDoc As MSHTML.HTMLDocument
Dim objRange As IHTMLTxtRange
Dim objInsp As Inspector
Dim objMail As MailItem
Dim strText As String
Dim bolAnExcel As Boolean, bolFound As Boolean
Dim objTask As Word.Task
If Abs(GetKeyState(17) < 0) Then 'Strg gedrueckt
bolAnExcel = True
Else
bolAnExcel = False
End If
Ueber die API-Funktion "GetKeyState()" pruefen wir
zunaechst, ob die Strg-Taste gedrueckt ist und setzen ein
Kennzeichen fuer die spaetere Uebertragung.
On Error Resume Next
Set objMail = Application.ActiveInspector.CurrentItem
If Err <> 0 Then
Beep
MsgBox "Das aktuelle Element ist keine Nachricht...", _
vbOKOnly + vbExclamation, "!!! Problem !!!"
Exit Sub
End If
Dieser Bereich prueft das aktuelle Element - ist es keine
Nachricht, geben wir eine entsprechende Meldung aus und
verlassen die Routine.
Set objInsp = ActiveInspector
If objInsp.IsWordMail And objInsp.EditorType = _
olEditorWord Then
Set objWORDDoc = objInsp.WordEditor
Set appWord = objWORDDoc.Parent
strText = appWord.Selection.Text
ElseIf objInsp.EditorType = olEditorHTML Then
Set objHTMLDoc = objInsp.HTMLEditor
Set objRange = objHTMLDoc.Selection.createRange
strText = objRange.Text
ElseIf objInsp.EditorType = olEditorRTF Then
strText = objMail.Body
ElseIf objInsp.EditorType = olEditorText Then
strText = objMail.Body
End If
Je nach Nachrichtenformat und Editortyp lesen wir hier den
markierten Text oder die komplette Nachricht aus (zur
Erinnerung: RTF und TXT im internen Editor unterstuetzt
keine Markierungen...) und legen das Ergebnis in der
Variablen "strText" ab.
If bolAnExcel Then 'Text in Excel einfuegen
Abhaengig vom eingangs gesetzten Kennzeichen fuegen wir den
Text dann in Excel oder Word ein.
Err.Clear
Set appExcel = GetObject(, "Excel.Application")
If Err <> 0 Then 'Instanz starten...
Err.Clear
Set appExcel = CreateObject("Excel.Application")
End If
If Err <> 0 Then
Beep
MsgBox "Excel konnte nicht gestartet werden!", _
vbOKOnly + vbCritical, "!!! Problem !!!"
Exit Sub
End If
Fuer die Uebertragung an Excel versuchen wir hier zunaechst
ueber "GetObject()" eine Referenz auf ein bereits laufendes
Excel zu erhalten. Ist das nicht moeglich, starten wir ueber
"CreateObject()" eine neue Instanz. Andernfalls geben wir
eine entsprechende Meldung aus und verlassen die Routine.
With appExcel
If .Workbooks.Count = 0 Then
.Workbooks.Add
End If
.Visible = True
.WindowState = xlMaximized
.Windows(0).Activate
.ActiveCell.Activate
.Selection = strText
End With
In diesem Bereich pruefen wir, ob eine Arbeitsmappe
geoeffnet ist und legen gegebenenfalls eine neue an. Die
weiteren Anweisungen machen Excel dann sichtbar und holen
das Programmfenster in den Vordergrund. Abschliessend wird
der ermittelte Text aus der Nachricht in die aktuelle
Markierung bzw. in die aktivierte Zelle der Tabelle
geschrieben.
Else 'Text in Word einfuegen
bolFound = True
Err.Clear
Set appWord = GetObject(, "Word.Application")
If Err <> 0 Then 'Instanz starten...
Err.Clear
Set appWord = CreateObject("Word.Application")
Else 'Word laeuft bereits...
If Not appWord.Visible Then 'Instanz unsichtbar...
'Pruefen, ob ein Dokument vorhanden ist
For Each objTask In appWord.Tasks
If InStr(objTask.Name, "- Microsoft Word") <> _
0 And objTask.Visible Then
objTask.Activate
SendKeys strText, True
bolFound = True
Exit For
End If
Next objTask
If bolFound Then Exit 

Sub ' Job erledigt...
Wie weiter oben bereits erlaeutert, stellt Word uns vor
einige Probleme. In diesem Bereich handhaben wir den
Umstand, dass Word eventuell als E-Mail-Editor laeuft und
pruefen die Tasks, ob parallel ein Dokument geoeffnet ist.
Wenn ja, aktivieren wir das entsprechende Fenster und
uebertragen den Text als Tastatureingabe.
'Word laeuft versteckt, kein Dokument geoeffnet
Set appWord = CreateObject("Word.Application")
End If 'Word laeuft unsichtbar?...
End If 'Word laeuft nicht...
If Err <> 0 Then
Beep
MsgBox "Word konnte nicht gestartet werden!", _
vbOKOnly + vbCritical, "!!! Problem !!!"
Exit Sub
End If
Andernfalls versuchen wir, eine einsatzbereite Instanz zu
starten. Misslingt das, wird eine entsprechende
Fehlermeldung angezeigt und die Routine verlassen.
'Word laeuft sichtbar, ggf. Dokument anlegen
If appWord.Documents.Count = 0 Then
appWord.Documents.Add          'Neues Dokument
End If
With appWord
.Visible = True
.Activate
.Selection.TypeText strText  'In aktuelles Dokument
End With
End If 'bolAnExcel...
End Sub

Hier pruefen wir zuerst, ob ein Dokument geoeffnet ist und
legen gegebenenfalls ein neues an. Die weiteren Anweisungen
machen Word dann sichtbar und holen es aktiviert in den
Vordergrund. Abschliessend wird der oben ermittelte Text aus
der Nachricht an die aktuelle Cursorposition in das Dokument
geschrieben.
Um nach dem Sichern des eingegebenen Makros den Aufruf ueber
ein Symbol im Nachrichtenfenster vornehmen zu koennen, gehen
Sie wie folgt vor:
1. Wechseln Sie mit Alt+F11 zurueck zu Outlook.
2. Oeffnen Sie eine Nachricht im Posteingang, klicken Sie
mit der rechten Maustaste auf eine Symbolleiste, waehlen
Sie das Kontextmenue ANPASSEN an und wechseln Sie im
folgenden Dialog auf die Registerkarte "Befehle".
3. Markieren Sie in der Liste KATEGORIEN den Eintrag
"Makros" und ziehen Sie "Modulname.SelWordExcel" in die
gewuenschte Symbolleiste.
4. Klicken Sie mit der rechten Maustaste auf das neue Symbol
und nehmen Sie im Eigenschaften-Menue die gewuenschten
Einstellungen vor.
5. Klicken Sie im "Anpassen"-Dialog auf die Schaltflaeche
SCHLIESSEN.
In Zukunft koennen Sie per Mausklick einen markierten Text
beziehungsweise die komplette Nachricht an Word oder Excel
uebergeben. Wenn Sie mit gedrueckter Strg-Taste auf das
Symbol klicken, erfolgt die Uebergabe an Excel, ein normaler
Klick ohne Sondertaste uebergibt den Text an Word.
Anzeige
AW: Daten aus eMails in Excel automatisch übertragen?
12.11.2004 11:58:15
Sebastian
Hallo,
danke für deinen post!
Ich werd mir das heute abend mal in Ruhe durchlesen.
Tschö mit ö

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige