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

Forumthread: E-Mail inhalt mit vba in Excel einfügen

E-Mail inhalt mit vba in Excel einfügen
28.05.2015 13:39:43
Simon
Hallo ihr :)
Ich habe ein VBA-Makro gefunden welches genutzt werden kann um Inhalte einer E-Mail in Excel einzufügen.
Das wollte ich jetzt ausprobieren. Bekomme aber die Fehlermeldung:
"Fehler beim Kompilieren: Benutzerdefinierter Typ nicht definiert."
Wie bekomme ich das weg?
Vielen Dank im Voraus :)
Hier der Code:
Option Explicit

Sub CopyToExcel()
Dim xlApp As Excel.Application
Dim xlWB As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim olItem As Outlook.MailItem
Dim vText As Variant
Dim sText As String
Dim vItem As Variant
Dim oRng As Range
Dim i As Long
Dim rCount As Long
Dim bXStarted As Boolean
Dim myTime As String
Const strPath As String = "\\HE111168e004\a11949697$\Home\System\Desktop\Mappe.xlsx"
If Application.ActiveExplorer.Selection.Count = 0 Then
MsgBox "No Items selected!", vbCritical, "Error"
Exit Sub
End If
On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")
If Err  0 Then
Application.StatusBar = "Please wait while Excel source is opened ... "
Set xlApp = CreateObject("Excel.Application")
bXStarted = True
End If
On Error GoTo 0
'Open the workbook to input the data
Set xlWB = xlApp.Workbooks.Open(strPath)
Set xlSheet = xlWB.Sheets("Tabelle1")
'Process each selected record
For Each olItem In Application.ActiveExplorer.Selection
sText = olItem.Body
vText = Split(sText, Chr(13))
'Find the next empty line of the worksheet
rCount = xlSheet.Range("B" & xlSheet.Rows.Count).End(xlUp).Row
rCount = rCount + 1
'Check each line of text in the message body
For i = UBound(vText) To 0 Step -1
If InStr(1, vText(i), "Source:") > 0 Then
vItem = Split(vText(i), Chr(58))
xlSheet.Range("A" & rCount) = Trim(vItem(1))
End If
If InStr(1, vText(i), "Kundennummer") > 0 Then
vItem = Split(vText(i), Chr(58))
xlSheet.Range("B" & rCount) = Trim(vItem(1))
myTime = olItem.ReceivedTime
xlSheet.Range("A" & rCount) = myTime
End If
If InStr(1, vText(i), "Produkt") > 0 Then
vItem = Split(vText(i), Chr(58))
xlSheet.Range("C" & rCount) = Trim(vItem(1))
End If
If InStr(1, vText(i), "Widerrufsfrist") > 0 Then
vItem = Split(vText(i), Chr(58))
xlSheet.Range("D" & rCount) = Trim(vItem(1))
End If
If InStr(1, vText(i), "Termin") > 0 Then
vItem = Split(vText(i), Chr(58))
xlSheet.Range("E" & rCount) = Trim(vItem(1))
End If
Next i
xlWB.Save
Next olItem
xlWB.Close SaveChanges:=True
If bXStarted Then
xlApp.Quit
End If
Set xlApp = Nothing
Set xlWB = Nothing
Set xlSheet = Nothing
Set olItem = Nothing
End Sub

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: E-Mail inhalt mit vba in Excel einfügen
28.05.2015 14:02:59
mumpel
Hallo!
1. Wie lautet die Fehlermeldung?
2. Der Code ist für Outlook-VBA, nicht für Excel-VBA.
3. Du musst in Outlook-VBA einen Verweis auf die "Microsoft Excel 12.0 Object Library" setzen.
Gruß, René

AW: E-Mail inhalt mit vba in Excel einfügen
28.05.2015 14:25:52
Simon
Ah jetzt hat es geklappt.
Sorry meinte auch Outlook.
Also es hat geklappt die Daten in Excel einzupflegen. Allerdings funktioniert das jetzt nur wenn die E-Mail keinen Betreff hat.
Jemand eine Idee was ich einfügen muss damit alle E-Mails mit dem Namen: xyz auch mitgelesen werden?
Und: Wenn jemand noch andere Sachen in der E-Mail vorhanden sind, dann wird in die Excel Tabelle gar nichts eingetragen.
Wie kann ich das verhindern, dass die doch ausgelesen wird?

Anzeige
AW: E-Mail inhalt mit vba in Excel einfügen
30.05.2015 10:10:36
fcs
Hallo Simon,
mit dem Betreff einer Outlook-Mail kann das eigentlich nichts zu tun haben.
Das Makro funktioniert so, dass du im Outlook-Mailordner die Mails selektierst, deren Daten du nach Excel in die Datei übertragen möchtest. Dann das Makro starten.
Wenn du nicht nur Daten aus Zeilen übertragen willst, die die gesuchten Texte enthalten,sondern auch anderen Bodytext, dann musst du dasMakro etwa wie folgt anpassen.
Ich hab die Fehlerbehandlung auch modifiziert, so dass gezielte Aktionen erfolgen und nicht einfach weitergemacht wird.
Gruß
Franz
'Makro unter Outlook 2010 -
'Im Outlook-VBA-Editor muss unter Extras--Verweise der Verweis auf
'Microsoft Excel X.Y.Object Library
'gesetzt werden!!!!
Sub CopyToExcel()
Dim xlApp As Excel.Application
Dim xlWB As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim olItem As Outlook.MailItem
Dim vText As Variant
Dim sText As String
Dim vItem As Variant
Dim oRng As Range
Dim i As Long
Dim rCount As Long
Dim bXStarted As Boolean
Dim myTime As String
Dim sBodyZeilen As String, bolGelesen As Boolean
Const strPath As String = "\\HE111168e004\a11949697$\Home\System\Desktop\Mappe.xlsx"
'   Const strPath As String = "C:\Users\Public\Test\MappeOL_Vorlage.xlsx"
On Error GoTo Fehler
If Application.ActiveExplorer.Selection.Count = 0 Then
MsgBox "No Items selected!", vbCritical, "Error"
Exit Sub
End If
Set xlApp = GetObject(, "Excel.Application")
xlApp.StatusBar = "Please wait while Excel source is opened ... "
'Open the workbook to input the data
Set xlWB = xlApp.Workbooks.Open(strPath)
Set xlSheet = xlWB.Sheets("Tabelle1")
xlApp.ScreenUpdating = False
'Find the last used line in column B of the worksheet
rCount = xlSheet.Range("B" & xlSheet.Rows.Count).End(xlUp).Row
'Process each selected record
For Each olItem In Application.ActiveExplorer.Selection
sText = olItem.Body
sText = VBA.Replace(sText, Chr(10), "") 'Zeilenschaltung durch Leerstring ersetzen
sText = VBA.Replace(sText, Chr(160), " ") 'Zeichen 160 (was auch immer das ist) _
durch Leerzeichen ersetzen
vText = Split(sText, Chr(13)) 'Bodytext am Absatzzeichen splitten
rCount = rCount + 1
'Check each line of text in the message body
For i = UBound(vText) To 0 Step -1
If Trim(vText(i))  "" Then
bolGelesen = False
If InStr(1, vText(i), "Source:") > 0 Then
vItem = Split(vText(i), Chr(58)) 'Chr(58) = ":"
If UBound(vItem) > 0 Then _
xlSheet.Range("A" & rCount) = Trim(vItem(1)): bolGelesen = True
End If
If InStr(1, vText(i), "Kundennummer") > 0 Then
vItem = Split(vText(i), Chr(58))
If UBound(vItem) > 0 Then
xlSheet.Range("B" & rCount) = Trim(vItem(1))
myTime = olItem.ReceivedTime
xlSheet.Range("A" & rCount) = myTime
bolGelesen = True
End If
End If
If InStr(1, vText(i), "Produkt") > 0 Then
vItem = Split(vText(i), Chr(58))
If UBound(vItem) > 0 Then _
xlSheet.Range("C" & rCount) = Trim(vItem(1)): bolGelesen = True
End If
If InStr(1, vText(i), "Widerrufsfrist") > 0 Then
vItem = Split(vText(i), Chr(58))
If UBound(vItem) > 0 Then _
xlSheet.Range("D" & rCount) = Trim(vItem(1)): bolGelesen = True
End If
If InStr(1, vText(i), "Termin") > 0 Then
vItem = Split(vText(i), Chr(58))
If UBound(vItem) > 0 Then _
xlSheet.Range("E" & rCount) = Trim(vItem(1)): bolGelesen = True
End If
If bolGelesen = False Then
'Bodytext in Variable sammeln, wenn in den Zeilen oberhalb der Inhalt nicht  _
_
ausgewertet wurde
sBodyZeilen = vText(i) & IIf(sBodyZeilen = "", "", Chr(10)) & sBodyZeilen
End If
End If
Next i
If sBodyZeilen  "" Then
'restlichen Bodytext in Spalte F eintragen
xlSheet.Range("A" & rCount) = olItem.ReceivedTime
xlSheet.Range("F" & rCount) = sBodyZeilen
End If
xlWB.Save
Next olItem
xlWB.Close SaveChanges:=True
xlApp.ScreenUpdating = True
xlApp.StatusBar = False
If bXStarted Then
xlApp.Quit
End If
Fehler:
With Err
Select Case .Number
Case 0 'alles OK
Case 429 'Excel-Anwendung ist nicht gestartet
Set xlApp = CreateObject("Excel.Application")
bXStarted = True
xlApp.Visible = True  'kann wenn alles funktioniert deaktiviert werden
Resume Next
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, _
vbOKOnly, "Outlook-Makro - copytoexcel"
End Select
End With
Set xlApp = Nothing
Set xlWB = Nothing
Set xlSheet = Nothing
Set olItem = Nothing
End Sub

Anzeige
AW: E-Mail inhalt mit vba in Excel einfügen
28.05.2015 14:06:21
fcs
Hallo Simon,
das Makro scheint ja ein Outlook-Makro zu sein.
Im Outlook-VBA-Editor musst du unter Extras-Verweise den Verweis auf die "Mirosoft Excel X.Y Object Library" aktivieren (Häkchen setzen).
Gruß
Franz
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

E-Mail-Inhalt mit VBA in Excel einfügen


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor in Outlook:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
    • Unter "Extras" wähle "Verweise" und aktiviere den Verweis auf die "Microsoft Excel X.Y Object Library".
  2. Füge den VBA-Code ein:

    • Kopiere den folgenden Code in ein neues Modul:
Sub CopyToExcel()
    Dim xlApp As Excel.Application
    Dim xlWB As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Dim olItem As Outlook.MailItem
    Dim vText As Variant
    Dim sText As String
    Dim vItem As Variant
    Dim i As Long
    Dim rCount As Long
    Dim bXStarted As Boolean
    Const strPath As String = "C:\Pfad\zu\deiner\Mappe.xlsx"

    If Application.ActiveExplorer.Selection.Count = 0 Then
        MsgBox "No Items selected!", vbCritical, "Error"
        Exit Sub
    End If

    ' Excel-Anwendung starten
    Set xlApp = New Excel.Application
    Set xlWB = xlApp.Workbooks.Open(strPath)
    Set xlSheet = xlWB.Sheets("Tabelle1")

    ' Daten aus E-Mails importieren
    For Each olItem In Application.ActiveExplorer.Selection
        sText = olItem.Body
        vText = Split(sText, vbCrLf)
        rCount = xlSheet.Range("B" & xlSheet.Rows.Count).End(xlUp).Row + 1

        ' Überprüfen und speichern der relevanten Daten
        For i = LBound(vText) To UBound(vText)
            If InStr(1, vText(i), "Suchbegriff") > 0 Then
                vItem = Split(vText(i), ":")
                xlSheet.Cells(rCount, 1).Value = Trim(vItem(1))
            End If
        Next i
    Next olItem

    xlWB.Save
    xlWB.Close
    xlApp.Quit
End Sub
  1. Makro ausführen:
    • Wähle die E-Mails aus, deren Daten du in Excel einfügen möchtest.
    • Führe das Makro aus, um die gewünschten Daten automatisch zu übertragen.

Häufige Fehler und Lösungen

  • Fehler: Benutzerdefinierter Typ nicht definiert:

    • Stelle sicher, dass du den Verweis auf die "Microsoft Excel X.Y Object Library" korrekt gesetzt hast.
  • E-Mails ohne Betreff werden nicht verarbeitet:

    • Überprüfe den Code und passe die Bedingungen an, um auch E-Mails ohne Betreff zu berücksichtigen.
  • Daten werden nicht korrekt in Excel übertragen:

    • Vergewissere dich, dass die Suchbegriffe im E-Mail-Text korrekt sind und dass der Code diese auch richtig ausliest.

Alternative Methoden

  • Verwendung von Power Query:

    • Du kannst auch Power Query in Excel nutzen, um E-Mails aus Outlook zu importieren, allerdings erfordert dies eine andere Herangehensweise und ist weniger automatisiert.
  • Excel-Funktionen:

    • Anstatt VBA zu verwenden, kannst du auch Excel-Funktionen wie WEBSERVICE und FILTERXML nutzen, um Daten aus E-Mails zu ziehen, falls diese in einem entsprechenden Format vorliegen.

Praktische Beispiele

  • Beispiel für das Einfügen von E-Mail-Inhalten:
    • Wenn du beispielsweise die Kundennummer und den Produktnamen aus einer E-Mail extrahieren möchtest, kannst du den Code im Schritt-für-Schritt-Anleitung entsprechend anpassen, um diese spezifischen Informationen zu filtern und in die Excel-Tabelle einzufügen.

Tipps für Profis

  • Optimierung des Codes:

    • Achte darauf, unnötige Schleifen zu vermeiden und den Code so zu strukturieren, dass er effizient arbeitet. Beispielsweise durch das Verwenden von Arrays.
  • Fehlerbehandlung:

    • Implementiere eine robuste Fehlerbehandlung, um sicherzustellen, dass das Makro auch bei unerwarteten Eingaben stabil bleibt.
  • Dokumentation:

    • Dokumentiere deinen Code gut, damit du und andere Benutzer später nachvollziehen können, wie das Makro funktioniert und wo Anpassungen nötig sein könnten.

FAQ: Häufige Fragen

1. Wie kann ich Daten aus E-Mails in Excel importieren? Du kannst dies mithilfe eines VBA-Makros tun, das die E-Mail-Inhalte analysiert und die gewünschten Daten in eine Excel-Tabelle überträgt.

2. Was ist der Vorteil von VBA gegenüber anderen Methoden? VBA ermöglicht eine automatisierte und individuelle Anpassung, sodass du spezifische Daten nach deinen Anforderungen filtern und übertragen kannst.

3. Kann ich auch E-Mails mit bestimmten Betreffs filtern? Ja, du kannst den VBA-Code anpassen, um nur E-Mails mit bestimmten Betreffs auszuwählen und deren Inhalte in Excel zu übertragen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige