Excel VBA - Emailbody aus Outlook auslesen

jerry0110

Erfahrenes Mitglied
Ich habe hierzu noch mal eine Frage.
Wenn ich das Array items(0) über die msgbox aufrufe funktioniert das ohne Probleme.

Wenn ich jetzt den u. s. Code nutze, dann kommt immer der Fehler, Objekt unterstützt diese Eigenschaft oder Methode nicht. Warum? Auch ohne .Value klappt es bei items nicht

Visual Basic:
        If items(0) = "xyz@test.de" Then
            ThisWorkbook.Worksheet("xyz@test.de").Range("B2").Value = items(1).Value
            ThisWorkbook.Worksheet("xyz@test.de").Range("C2").Value = items(2).Value
            ThisWorkbook.Worksheet("xyz@test.de").Range("D2").Value = items(3).Value
            ThisWorkbook.Worksheet("xyz@test.de").Range("E2").Value = items(4).Value
            ThisWorkbook.Worksheet("xyz@test.de").Range("F2").Value = items(5).Value
        End If
 

Yaslaw

alter Rempler
Moderator
Warum itesm(#).Value?
Und wo GENAU kommt WELCHER Fehle wenn du ohne .Value arbeitest?
Schon bei items(1) oder erst bei items(5)?

ThisWorkbook.Worksheet("xyz@test.de").Range("B2").Value = items(1)


Setz mal ein Breakpoint und schau die items. mal genauer an.
 

jerry0110

Erfahrenes Mitglied
Der Fehler kommt direkt beim "
ThisWorkbook.Worksheet("xyz@test.de").Range("B2").Value = items(1).Value
"
ich habe alle items mit msgbox(en) vorher versehen.
Items(1) = xyz@test.de
items(2) = eine Zahl
.
.
.

In der msgbox wird alles korrekt angezeigt.
 

jerry0110

Erfahrenes Mitglied
Wenn ich einen Breakpoint lege und mit der Maus über die einzelnen items gehe, dann sehe ich alle werte die es enthält.
 

Yaslaw

alter Rempler
Moderator
Finde den Unterschied, das Erste ist mein Code, der Zweite deiner.

ThisWorkbook.Worksheet("xyz@test.de").Range("B2").Value = items(1)
ThisWorkbook.Worksheet("xyz@test.de").Range("B2").Value = items(1).Value

Zudem:
Warum itesm(#).Value?
 

Yaslaw

alter Rempler
Moderator
Bei mir wird sogar markiert, was falsch ist. Es markiert Worksheet.

2020-02-06_121422.jpg

Ein Workbook hat kein Property names Worksheet. Jedoch hat es Worksheets

ThisWorkbook.Worksheets("xyz@test.de").Range("B2").Value = items(1)
 

jerry0110

Erfahrenes Mitglied
Einträge funktionieren jetzt und er schreibt es in die Spalte.

So jetzt kommt das nächste Problem.

Ich muss den Email Betreff und das Datum der Mail auslesen.
Anhand des Betreffs muss der untere Code dann in das richtige Sheet geschrieben werden.
Funktioniert aber leider nicht.

Ich hatte zum Testen nach der For Each olMail
Visual Basic:
msgbox olMail.subject
stehen und er hat dann auch den Betreff ausgegeben. In der Schleife selber macht er das leider nicht.

folgendes habe ich zum Guten gegeben:

Visual Basic:
    For Each olMail In olFolder.Items
        
        If olMail.Subject = "*Auswertung Resa ausgehende Emails*" Then
            
           'Mit dem RegEx die einzelnen Zeilen auslsen
          
           letzte = Sheets("Gesamt Eingang").UsedRange.SpecialCells(xlCellTypeLastCell).Row
                
           For Each match In rx.Execute(mail.Body)
           Set Items = match.SubMatches
           '//TODO: Anstelle des debug.print diese in eine neie Zeile eines Excelsheets schreiben
          
               ziel.Range("A" & letzte).Value = Format(olMail.ReceivedTime, "DD.MM.YYYY") - 1
               ziel.Range("B" & letzte).Value = Items(0)
               ziel.Range("C" & letzte).Value = Items(1)
               ziel.Range("D" & letzte).Value = Items(2)
               ziel.Range("E" & letzte).Value = Items(3)
               ziel.Range("F" & letzte).Value = Items(4)
               ziel.Range("G" & letzte).Value = Items(5)
              
               letzte = letzte + 1
        
           Next match
        
        ElseIf olMail.Subject = "*Auswertung Resa eingehende Emails*" Then
            
        'Mit dem RegEx die einzelnen Zeilen auslsen
        
           letzte2 = Sheets("Gesamt Ausgang").UsedRange.SpecialCells(xlCellTypeLastCell).Row
                
           For Each match In rx.Execute(mail.Body)
           Set Items = match.SubMatches
           '//TODO: Anstelle des debug.print diese in eine neie Zeile eines Excelsheets schreiben
          
               ziel2.Range("A" & letzte).Value = Format(olMail.ReceivedTime, "DD.MM.YYYY") - 1
               ziel2.Range("B" & letzte).Value = Items(0)
               ziel2.Range("C" & letzte).Value = Items(1)
               ziel2.Range("D" & letzte).Value = Items(2)
               ziel2.Range("E" & letzte).Value = Items(3)
               ziel2.Range("F" & letzte).Value = Items(4)
               ziel2.Range("G" & letzte).Value = Items(5)
              
               letzte2 = letzte2 + 1
        
           Next match
        
        End If
    
        
    Next
 

Yaslaw

alter Rempler
Moderator
Das solltest du doch wissen. = bedeutet gleich und nicht enthält. Die * im Vergleichstring würden also nur dann richtig sein, wenn auch das Subjekt * enthält

Was du haben willst ist like
Code:
?"abc" = "abc*"
False
?"abcde" = "abc*"
False

?"abc" like "abc*"
True
?"abcde" like "abc*"
True