Excel VBA - Tabelle vergleichen und Wert in Variable speichern


jerry0110

Erfahrenes Mitglied
Hallo zusammen,

ich habe eine VBA Script geschrieben, dass eine Mail erstellt wird.
Hierbei möchte ich im Sheet Empfänger eine Nummer mit einer Nummer im Sheet Agenturliste vergleichen.
Wenn diese die gleiche ist, dann soll er die Mailadresse aus dem Sheet Agenturliste Feld AB dann in eine Variable stecken, weil ich diese dann nutzen will um dem Empfänger zu deklarieren in der Mail.

Folgenden Code habe ich dafür erstellt:

Visual Basic:
Set ziel = ThisWorkbook.Worksheets("Empfänger")
Set source = ThisWorkbook.Worksheets("Agenturliste")

For f = lastRowNr(ziel) To 4 Step -1

    If ziel.Range("A" & f) = "ALL" Then
        absendmail = 1
    ElseIf ziel.Range("A" & f) = "XALL" Then
        absendmail = 2
    ElseIf ziel.Range("A" & f) = "XBYE" Or ziel.Range("A" & f) = "BYE" Then
        absendmail = 3
    Else
        GoTo nächster
    End If
    
    For i = lastRowNr(source) To 2 Step -1
        If ziel.Range("E" & f).Value = source.Range("B" & i).Value Then
            empfmail = source.Range("AB" & i).Value
        Else
            empfmail = ""
        End If
    Next i

..... mehr code

next f
Der erste Teil bestimmt den Emailtext und der 2te Teil soll dann die Abfrage machen.
Ich habe 4 Testuser in der Excel. Er erstellt 4 Email. 2 mit Empfänger und 2 ohne.
Und das obwohl die Nummer immer in beiden Sheets vorhanden ist.

Wo ist der Denkfehler?
 

Zvoni

Erfahrenes Mitglied
Wo ist das Label "nächster" (Pfui bäähh... ein Goto)?
Bei den zwei fehlenden "Mails": Springt der code überhaupt in die zweite For-Schleife?

EDIT: zwischen Zeile 18 und 19 ein "Exit For" einfügen (Also vor das "Else")
Erklärung: Nehmen wir an, im ersten Durchlauf von i (du gehst von unten nach oben) sind die Werte gleich, also geht er in den Then-Teil, und setzt empfmail auf den Wert von source in Spalte AB.
Die For-Schleife läuft aber weiter! Für das nächste i (eine Zeile höher) stimmen die Werte schon nicht mehr überein, und schon springt er in den Else-Teil und überschreibt empfmail mit einem BLANK.
In deinem Szenario: Bei Prüfung auf Gleichheit innerhalb einer For-Schleife: Sofern Gleichheit gefunden, Schleife verlassen! Insbesondere wenn es um eindeutige Werte geht.
 
Zuletzt bearbeitet:

jerry0110

Erfahrenes Mitglied
Wo ist das Label "nächster" (Pfui bäähh... ein Goto)?
Bei den zwei fehlenden "Mails": Springt der code überhaupt in die zweite For-Schleife?

EDIT: zwischen Zeile 18 und 19 ein "Exit For" einfügen (Also vor das "Else")
Erklärung: Nehmen wir an, im ersten Durchlauf von i (du gehst von unten nach oben) sind die Werte gleich, also geht er in den Then-Teil, und setzt empfmail auf den Wert von source in Spalte AB.
Die For-Schleife läuft aber weiter! Für das nächste i (eine Zeile höher) stimmen die Werte schon nicht mehr überein, und schon springt er in den Else-Teil und überschreibt empfmail mit einem BLANK.
In deinem Szenario: Bei Prüfung auf Gleichheit innerhalb einer For-Schleife: Sofern Gleichheit gefunden, Schleife verlassen! Insbesondere wenn es um eindeutige Werte geht.
das nächster ist ganz am Schluss vom Code.

Das Exit For war es wohl was gefehlt hat.
Jetzt erstellt er die Emails mit den richtigen Adressen und wo er es nicht geMatched wurde ist der Empfänger leer.