Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Outlook 2016 Emails mit Formatierung nach Excel importieren
#11
Hallo Zusammen,

um dieses Projekt abschliessen zu können, brauche ich aus dem Forum nochmal Unterstützung. Das Makro funktioniert soweit und die Emails werden nach Excel exportiert. Bisher ist der "Body" nach wie vor ohne Formatierung in Excel. Dazu habe ich bisher keine Lösung gefunden.

Die zweite mögliche Lösung wäre, den "Body" so in Excel zu belassen, aber das Makro zu erweitern. 

Meine Frage ist: Kann der "gelb" markierte Text aus dem Email extra ausgelesen werden und eine zweite Spalte übertragen werden.

D.h. Makro sucht im Email nach dem Text der gelb markiert ist, kopiert diesen Text in eine Zelle in einer neuen Spalte.

Könntet ihr so nett sein und mir gleich die Marko Befehle an der richtigen Stelle einfügen sonst läuft das Makro wieder nicht und ich bin nicht fit genug den Fehler zu finden. Für zukünftige Interessierte ist dann auch die Lösung gut kopierbar.

Vielen herzlichen Dank.

Karin

Code:
Sub OutlookPosteingang()

'Variablendeklaration

Dim olApp As Outlook.Application
Dim olVerz As Outlook.MAPIFolder
Dim objMail As MailItem
Set olApp = CreateObject("Outlook.Application")
Set olVerz = olApp.GetNamespace("Mapi").GetDefaultFolder(olFolderInbox).Folders("Test")


Dim AnzEintraege As Integer, i As Integer, Email As Integer
'  Hier wird eine Tabelle hinzugefuegt

Sheets.Add
'Globale Fehlerbehandlung  -> Excel soll automatisch weitermachen, egal welcher Fehler
'On Error Resume Next'

' Ueberschriften im neuen Blatt  -> die erste Zeile von A1 - E1
[A1].Value = "Betreff"
[B1].Value = "Datum Uhrzeit"
[C1].Value = "empfangen von"
[D1].Value = "gesendet an"
[E1].Value = "Nachricht"

'Erste Zeile soll Fett formatiert werden
Rows(1).Font.Bold = True

'Setzen der Variable als Outlook Application; Zugriff auf Outlook
Set OLF = GetObject("", "Outlook.Application") _
.GetNamespace("Mapi").GetDefaultFolder(olFolderInbox).Folders("Test")

'Setzen der Variable -> es sollen alle Nachrichten im Ordner 'Test (Folders) gezaehlt werden
AnzEintraege = OLF.Items.Count
'Setzen der Variablen auf '0'
i = 0: Email = 0
'Beginn Schleifendurchlauf (Schleife 1)  -> die Variable 'i' laeuft solange, wie Anzahl der EMails vorhanden sind
While i < AnzEintraege
   i = i + 1
   'Anzeigen einer Nachricht in der Statuszeile
   Application.StatusBar = "Lese Test" & _
   Format(i / AnzEintraege, "0%")
       'Was soll mit den Nachrichten geschehen?  (Schleife 2)
   With OLF.Items(i)
       Email = Email + 1
       'Zelle 1 mit dem Wert Betreff in der EMail
       Cells(Email + 1, 1).Value = .Subject
       'Zelle 2 mit dem Wert 'Empfangen am' in der EMail
       Cells(Email + 1, 2).Value = .ReceivedTime
       'Zelle 3 Absender
       Cells(Email + 1, 3).Value = .SenderName
       'Zelle 4 mit dem Wert
       Cells(Email + 1, 4).Value = .CC
       'Zelle 5 mit der eigentlichen Nachricht
       Cells(Email + 1, 5).Value = .Body
 
'Ende der Schleife 2

End With

'Ende der Schleife 1
Wend
'Die Variable muss wieder auf Null gesetzt werden = nothing halt
Set OLF = Nothing

'Loeschen der Leerzeilen in Spalte E und Spaltenbreite aendern, gehe zum Anfang Zelle A1"
Columns("E:E").Select
   Selection.ColumnWidth = 60
   Cells.Select
   With Selection
       .HorizontalAlignment = xlGeneral
       .VerticalAlignment = xlTop
       .WrapText = True
       .Orientation = 0
       .AddIndent = False
       .IndentLevel = 0
       .ShrinkToFit = False
       .ReadingOrder = xlContext
       .MergeCells = False
       .Replace What:=Chr(10) & "" & Chr(10) & " " & Chr(10), Replacement:=Chr(10)
   
'Die Zelle 'A1' soll selektiert werden
 [A1].Select
'Die Spalten sollen automatisch in der Breite angeglichen werden
Columns("A:F").AutoFit


'Die Exceldatei wird gespeichert
ActiveWorkbook.Saved = True
'Die Statuszeile wird wieder ausgeschaltet
Application.StatusBar = False
End With
End Sub
Antworten Top
#12
Hallo Karin,

ich dachte, Du hast zumindest die Sache mit dem HTMLBody drin …

Hier der Code. Es wird aber nur ein gelber Text gesucht, sofern vorhanden der erste genommen und erst mal zur Probe nur im Direktfenster ausgegeben.

Code:
Sub OutlookPosteingang()

'Variablendeklaration

Dim olApp As Outlook.Application
Dim olVerz As Outlook.MAPIFolder
Dim objMail As MailItem
Set olApp = CreateObject("Outlook.Application")
Set olVerz = olApp.GetNamespace("Mapi").GetDefaultFolder(olFolderInbox).Folders("Test")

Dim AnzEintraege As Integer, i As Integer, Email As Integer
'  Hier wird eine Tabelle hinzugefuegt

Sheets.Add
'Globale Fehlerbehandlung  -> Excel soll automatisch weitermachen, egal welcher Fehler
'On Error Resume Next'

' Ueberschriften im neuen Blatt  -> die erste Zeile von A1 - E1
[A1].Value = "Betreff"
[B1].Value = "Datum Uhrzeit"
[C1].Value = "empfangen von"
[D1].Value = "gesendet an"
[E1].Value = "Nachricht"

'Erste Zeile soll Fett formatiert werden
Rows(1).Font.Bold = True

'Setzen der Variable als Outlook Application; Zugriff auf Outlook
Set OLF = GetObject("", "Outlook.Application") _
.GetNamespace("Mapi").GetDefaultFolder(olFolderInbox).Folders("Test")

'Setzen der Variable -> es sollen alle Nachrichten im Ordner 'Test (Folders) gezaehlt werden
AnzEintraege = OLF.Items.Count
'Setzen der Variablen auf '0'
i = 0: Email = 0
'Beginn Schleifendurchlauf (Schleife 1)  -> die Variable 'i' laeuft solange, wie Anzahl der EMails vorhanden sind
While i < AnzEintraege
   i = i + 1
   'Anzeigen einer Nachricht in der Statuszeile
   Application.StatusBar = "Lese Test" & _
   Format(i / AnzEintraege, "0%")
       'Was soll mit den Nachrichten geschehen?  (Schleife 2)
   With OLF.Items(i)
       Email = Email + 1
       'Zelle 1 mit dem Wert Betreff in der EMail
       Cells(Email + 1, 1).Value = .Subject
       'Zelle 2 mit dem Wert 'Empfangen am' in der EMail
       Cells(Email + 1, 2).Value = .ReceivedTime
       'Zelle 3 Absender
       Cells(Email + 1, 3).Value = .SenderName
       'Zelle 4 mit dem Wert
       Cells(Email + 1, 4).Value = .CC
       'Zelle 5 mit der eigentlichen Nachricht
       Cells(Email + 1, 5).Value = .Body
       'wenn es ein htmlBody ist, dann
        If InStr(1, .HTMLBody, "") > 0 Then
          'htmlBody uebernehmen
          strHB = Right(.HTMLBody, Len(.HTMLBody) - InStr(1, .HTMLBody, "</head>") - 6)
          'schauen, ob was gelbes dabei ist
          iYel = InStr(1, strHB, "color:yellow") + 14
          'wenn was gelbes dabei ist, dann
          If iYel > 14 Then
            'Ende des gelben Textes anhand /span ermitteln
            iSpa = InStr(iYel, strHB, "</span")
            'gelben Text auslesen
            strYel = Mid$(strHB, iYel, iSpa - iYel)
            'Text im Direktfenster ausgeben
            Debug.Print strYel
          'Ende wenn was gelbes dabei ist, dann
          End If
       'Ende wenn es ein htmlBody ist, dann
        End If
    'Ende der Schleife 2
    End With
'Ende der Schleife 1
Wend
'Die Variable muss wieder auf Null gesetzt werden = nothing halt
Set OLF = Nothing

'Loeschen der Leerzeilen in Spalte E und Spaltenbreite aendern, gehe zum Anfang Zelle A1"
Columns("E:E").Select
   Selection.ColumnWidth = 60
   Cells.Select
   With Selection
       .HorizontalAlignment = xlGeneral
       .VerticalAlignment = xlTop
       .WrapText = True
       .Orientation = 0
       .AddIndent = False
       .IndentLevel = 0
       .ShrinkToFit = False
       .ReadingOrder = xlContext
       .MergeCells = False
       .Replace What:=Chr(10) & "" & Chr(10) & " " & Chr(10), Replacement:=Chr(10)
    
'Die Zelle 'A1' soll selektiert werden
[A1].Select
'Die Spalten sollen automatisch in der Breite angeglichen werden
Columns("A:F").AutoFit

'Die Exceldatei wird gespeichert
ActiveWorkbook.Saved = True
'Die Statuszeile wird wieder ausgeschaltet
Application.StatusBar = False
End With
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#13
Hallo mein Lieber,

es gibt eine Fehlermeldung, was klar ist, weil du vermutlich davon ausgegangen bist, dass der Text in gelb geschrieben ist. 
Der Text ist aber gelb markiert, deshalb findet er diesen nicht.

Es muss ja über Selection gehen, nur wie findet er über span das Ende?

Code:
'schauen, ob was gelbes dabei ist
         Selection.Find.ClearFormatting
         Selection.Find.Highlight = True
         Selection.Find.Execute
         While Selection.Find.Found = True
         If Selection.Range.HighlightColorIndex = wdYellow Then
               
       
         'wenn was gelbes dabei ist, dann
         'Ende des gelben Textes anhand /span ermitteln
           iSpa = InStr(iYel, strHB, "</span")
           'gelben Text auslesen
           
          strYel = Mid$(strHB, iYel, iSpa - iYel)
     
      'Ende wenn es ein htmlBody ist, dann
       End If

Danke für jede Unterstützung.

Viele Grüße
Karin
Antworten Top
#14
Hallöchen,

bei einer Hintergrundfarbe müsste man schauen, wie genau es codiert ist. Hier mal eine Variante:

PHP-Code:
<span style='background:yellow;mso-highlight:yellow'>auf</span


Die Zeile
PHP-Code:
iYel InStr(1strHB"color:yellow") + 14 

könnte ersetzt werden durch

PHP-Code:
iYel InStr(1strHB":yellow'>") + 

und dann die andere 14 in der If … darunter auch durch 9.
Ich teste das morgen mal.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste