VBA Programmierung für spezielle Aufgabe möglich?

Ich brauche aber für die E-Mail einige Daten aus der Zeile, die die Bedingung erfüllt.
Ergänzung ()

Mir fällt auch gerade auf, dass es sogar noch komplizierter wird

Das ganze wird ein regelmäßiger Prozess (mehrmals pro Monat). Die Daten werden aus einer Applikation exportiert. Ich importiere über ein Makro daher jedes Mal alle relevanten Daten.

Dann kommt ja das jetzige Makro ins Spiel, durch das gefiltert wird, für welchen Eintrag eine E-Mail erstellt werden soll.

Durch die Erinnerung, soll ja dann etwas abgearbeitet werden, sodass im bestens Fall beim nächsten Export und Import der Daten dieser Eintrag verschwunden ist.

Aber, wenn der Eintrag dann doch nicht abgearbeitet ist, steht er doch wieder drin. Dann will ich nicht nochmal die gleiche E-Mail schreiben, sondern eine mit einem anderen Text.
Also müsste ich, für denn Fall, dass die Bedingung
If Sourcetable.Range("W" & i) > Date -7 Then
wahr ist, abfragen, ob der Eintrag (anhand der Spalten A,C,G,W) bereits in meiner Übersichtsliste vorhanden ist UND bereits ein Hinweis auf eine bereits versendete E-Mail eingetragen ist.
Für den Fall, müsste eine E-Mail mit einem leicht anderen Text geschrieben werden.
Falls der Eintrag vorhanden ist, jedoch aus irgendwelchen Gründen keine E-Mail verschickt wurde (das Verschicken passiert ja noch manuell nach Prüfen der erstellten Mail), dann muss natürlich die E-Mail "1. Stufe" geschrieben werden.
 
Ich brauche aber für die E-Mail einige Daten aus der Zeile, die die Bedingung erfüllt.
Dann kannst du ja meinen Vorschlag mit dem Argument übernehmen, so kannst du einfach die Zeile übergeben und dann in der Email Funktion damit arbeiten.

Also müsste ich, für denn Fall, dass die Bedingung
If Sourcetable.Range("W" & i) > Date -7 Then
wahr ist, abfragen, ob der Eintrag (anhand der Spalten A,C,G,W) bereits in meiner Übersichtsliste vorhanden ist UND bereits ein Hinweis auf eine bereits versendete E-Mail eingetragen ist.
Das ist ja kein Problem, das machst du genau so, wie du es beschreibst, einfach prüfen ob die Einträge gleich sind. Dazu brauchst du dann eben noch eine zweite Schleife, die dein Zieldokument durchgeht und die Einträge prüft.
Falls der Eintrag vorhanden ist, jedoch aus irgendwelchen Gründen keine E-Mail verschickt wurde (das Verschicken passiert ja noch manuell nach Prüfen der erstellten Mail), dann muss natürlich die E-Mail "1. Stufe" geschrieben werden
Das ist schwer. Ich kann das bei mir schlecht testen, da ich kein Outlook eingerichtet habe.
Je nach dem, wie viele Einträge das so sind, ist es vielleicht am einfachsten, wenn du den Nutzer den Versandthinweis von Hand wieder aus der Tabelle entfernen lässt.
 
Guten Morgen

Danke. Es funktioniert.

Allerdings verstehe ich das "Zeile As Integer" nicht. Warum "Zeile"?

---
Oh...ich sehe gerade, dass er meinen letzten Beitrag von Freitag doch noch gespeichert hat. Hatte da ein paar Probleme beim Speichern :-D Ich gucke es mir mal an.
---
 
Zuletzt bearbeitet:
Allerdings verstehe ich das "Zeile As Integer" nicht. Warum "Zeile"?
Zeile wird da der Name der Variablen, mit der du dann in der Funktion weiter arbeiten kannst.

Beim Aufruf der Funktion wird einfach Zeile = i gesetzt (automatisch, du musst das nicht schreiben!!). Du kannst der Variablen auch jeden anderen Namen geben, auch wieder i. Ich wollte es nur etwas aussagekräftiger machen ;)
 
Alchemist schrieb:
Zeile wird da der Name der Variablen, mit der du dann in der Funktion weiter arbeiten kannst.

Beim Aufruf der Funktion wird einfach Zeile = i gesetzt (automatisch, du musst das nicht schreiben!!). Du kannst der Variablen auch jeden anderen Namen geben, auch wieder i. Ich wollte es nur etwas aussagekräftiger machen ;)

Ok. Er braucht das Zeile aber gar nicht. Er nimmt das i, ohne weitere Zuweisung. Ich habe in der Funktion EMailErstellung überall das i stehen ohne irgendwo eine Definition, ein For oder If zu haben. Also kann ich das Zeile As Integer auch weglassen... ?! :)
 
Nein, weglassen kannst du es nicht. Dann schreib statt Zeile eben i.

Im Moment wird das doch auch gar nicht funktionieren, oder? Standardwert der Variable ohne Deklaration wird wohl auch 0 sein, daher kannst du kompilieren aber es wird nicht funktionieren.
 
Alchemist schrieb:

Doch, es funktioniert.
Ergänzung ()

Alchemist schrieb:
Das ist ja kein Problem, das machst du genau so, wie du es beschreibst, einfach prüfen ob die Einträge gleich sind. Dazu brauchst du dann eben noch eine zweite Schleife, die dein Zieldokument durchgeht und die Einträge prüft.

Code:
For i = 2 To Sourcetable.Cells(Rows.Count, "A").End(xlUp).Row
' Prüfen, ob Bedingung erfüllt ist
If Sourcetable.Range("W" & i) > Date And Sourcetable.Range("W" & i) < Date + 7 Then
       ' Prüfen, ob Eintrag bereits vorhanden ist und ob bereits eine E-Mail verschickt wurde
    If Sourcetable("A" & i) = Targettable-Finden des Wertes aus Sourcetable("A"&i) And Sourcetable("C" & i) = Targettable-Finden des Wertes aus Sourcetable("C"&i) And Sourcetable("G" & i) = Targettable-Finden des
    Wertes aus Sourcetable("G"&i) ... usw ...   Then
       IfSourcetable("SentDate") <>" "
       Function EMailErstellen2.Stufe
       ...
       Else
       Function EMailErstellen1.Stufe
       ...
       End If
    End If
...
End If

Gibt es so etwas, dass ich eine Spalte nach dem Wert durchsuchen kann?
Ergänzung ()

Ok... mittlerweile und nach vielen Fehlermeldungen habe ich etwas, dass funktioniert.
Ergänzung ()

Andere Frage.

Ich lasse zwischendurch ein neues Tabellenblatt erzeugen. Der Name wird durch Benutzereingabe bestimmt.
Falls der Name schon vorhanden ist, soll der Benutzer immer wieder aufgefordert werden! Eben bis es diesen Namen nicht zwei Mal gibt.
 
Zuletzt bearbeitet: (Volltzitate entfernt)
Zurück
Oben