Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VB: Email suchen und öffnen

VB: Email suchen und öffnen
19.08.2004 15:12:42
Magda
Hallo,
ich möchte von VB aus gesteuert im einem OutlookOrdner (z.B. Inbox) die Emails nach einem bestimmten Kriterium (z.B. ein String in der Betreffzeile) suchen und dann diese öffnen. Evtl. auch den zugehörigen Attechment speichern.
Vielen Dank für eure Hilfe.
Gruß
Magda
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VB: Email suchen und öffnen
Jens
Hallo Magda!
Tja, wenn nicht einer hier dir eine fertige Lösung bietet ...
Das Thema ist kompliziert für Anfänger und da solltest du dich ruhig mal durchbeißen, das habe ich auch gemacht. Nur durch Praxis kommst du weiter. Bekommst du was Fertiges und verstehst es nicht, kannst du auch keine Änderungen einbauen. Recherchiere hier mal im Forum.
Datenauslesen will ich selbst noch (momentan keine Zeit dafür). Aber ich habe mittlerweile was gefunden, das ich mir selbst noch weiter anschauen muss. Guck mal:
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
;
Anzeige
Anzeige

Infobox / Tutorial

E-Mail mit VBA in Outlook suchen und öffnen


Schritt-für-Schritt-Anleitung

  1. Outlook VBA Editor öffnen: Drücke Alt + F11, um den VBA-Editor in Outlook zu starten.

  2. Referenzen setzen: Gehe zu Extras > Verweise und aktiviere die Referenzen für "Microsoft Word x.0 Object Library" und "Microsoft HTML Object Library". Dabei steht "x" für die Version (9 für 2000, 10 für 2002).

  3. VBA-Code einfügen: Füge den folgenden Code in ein neues Modul ein, um E-Mails nach einem bestimmten Betreff zu suchen:

    Sub EmailSuchen()
       Dim objOutlook As Outlook.Application
       Dim objNamespace As Outlook.Namespace
       Dim objFolder As Outlook.MAPIFolder
       Dim objItem As Object
       Dim strBetreff As String
       Dim gefunden As Boolean
    
       strBetreff = InputBox("Bitte gib den Betreff der E-Mail ein:", "E-Mail suchen")
       Set objOutlook = New Outlook.Application
       Set objNamespace = objOutlook.GetNamespace("MAPI")
       Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox)
    
       For Each objItem In objFolder.Items
           If TypeName(objItem) = "MailItem" Then
               If InStr(1, objItem.Subject, strBetreff, vbTextCompare) > 0 Then
                   objItem.Display
                   gefunden = True
                   Exit For
               End If
           End If
       Next objItem
    
       If Not gefunden Then
           MsgBox "Keine E-Mail mit dem Betreff '" & strBetreff & "' gefunden.", vbInformation
       End If
    End Sub
  4. Makro ausführen: Führe das Makro aus, indem du im VBA-Editor F5 drückst, oder binde es an eine Schaltfläche in Outlook.


Häufige Fehler und Lösungen

  • Fehler: "Excel konnte beim letzten Mal nicht gestartet werden"
    Lösung: Stelle sicher, dass Excel korrekt installiert ist und keine anderen Instanzen im Hintergrund laufen. Manchmal kann es helfen, den Computer neu zu starten.

  • Fehler: "Das aktuelle Element ist keine Nachricht"
    Lösung: Überprüfe, ob das aktuelle Element in Outlook tatsächlich eine E-Mail ist, wenn du das Makro ausführst.


Alternative Methoden

  • Manuelles Suchen: Du kannst die Suchfunktion in Outlook nutzen, um E-Mails nach Betreff oder Absender zu suchen. Klicke einfach in das Suchfeld oben in deinem E-Mail-Posteingang und gib deinen Suchbegriff ein.

  • Automatisierung mit Outlook Regeln: Erstelle Regeln, um eingehende E-Mails automatisch zu kategorisieren oder in bestimmte Ordner zu verschieben.


Praktische Beispiele

Um eine E-Mail mit dem Betreff "Projektstatus" zu suchen, kannst du das oben genannte Makro verwenden. Gib einfach "Projektstatus" in das Eingabefeld ein, und das Skript öffnet die entsprechende E-Mail, falls vorhanden.


Tipps für Profis

  • E-Mail-Posteingang öffnen: Du kannst den Posteingang direkt im VBA-Code anpassen, indem du Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox) änderst, um andere Ordner anzuzeigen.

  • Mails suchen optimieren: Verwende Like anstelle von InStr, um Wildcards in deiner Suchanfrage zu ermöglichen, z.B. If objItem.Subject Like "*" & strBetreff & "*" Then.


FAQ: Häufige Fragen

1. Wie kann ich den Outlook VBA Editor öffnen?
Drücke Alt + F11 in Outlook, um den VBA-Editor zu starten.

2. Kann ich E-Mails nach mehreren Kriterien suchen?
Ja, du kannst den Code erweitern, um nach weiteren Kriterien wie Absender oder Datum zu filtern.

3. Was tun, wenn ich keine E-Mails finde?
Überprüfe, ob der eingegebene Betreff korrekt ist, oder teste die Suche mit anderen Schlüsselwörtern.

4. Ist der Code mit allen Excel-Versionen kompatibel?
Ja, der Code funktioniert mit Outlook und Excel ab Version 2000, solange die entsprechenden Bibliotheken referenziert sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige