Wie erreiche ich, dass eine VBA-MsgBox nur einmal aufpoppt?
Ich habe schon mehrere Beiträge gelesen, bekomme es aber nicht hin. Kann mir einer diesen Befehl korrigieren. Die Msg Box soll nur einmal aufpoppen, wenn dieser bestimmte Wert auftaucht. Der Befehl funktioniert, aber poppt bei jeder weiteren Zelleingabe auf.
Private Sub Worksheet_Change(ByVal Target As Range)
x = Range("D15").Value
If x = "LK" Then MsgBox "Dieses Produkt benötigt eine Lebensmittelkühlung!", vbInformation, "Hinweis"
End Sub
3 Antworten
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D15")) Is Nothing Then
x = Range("D15").Value
If x = "LK" Then MsgBox "Dieses Produkt benötigt eine Lebensmittelkühlung!", vbInformation, "Hinweis"
End If
End Sub
Stimmt, da hat die alte Routine mal wieder zugeschlagen.
Der Befehlt funktioniert aber nur einmalig dann poppt die Msg Box auch bei erneuter Eingabe nicht mehr auf. Ich hätte die Msg Box jedes mal wenn dieser bestimmte Wert drin ist!?
Das Ereignis wird bei jeder Änderung in jeder Zelle des Tabellenblatts ausgelöst.
Entweder (je nach Ziel) solltest du x = Target.Value setzen oder den Bereich festlegen, auf den das Ereignis sich beziehen soll:
If Intersect(Target, Range("D1:D15")) is not Nothing then...
PS: Für deinen Fall würde eine einfache Gültigkeitsprüfung genügen:
Daten → Datenüberprüfung → Datenüberprüfung...
Super Idee!
Dort dann Benutzerdefiniert die Formel:
=D15<>"LK"
und bei Fehlermeldung/ Typ --> "Information" aus wählen und den Warn-Text eingeben.
Habe es getestet: Es verwirrt mich, aber du hast recht. Dort muss <> in die Formel.
Kannst du mir den kompletten Befehl aufschreiben ... bin bei der schreiberei ein wenig durcheinander gekommen! danke für die schnelle Hilfe
Zusammenfassung:
Entweder
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D1:D15")) Is Nothing then
If Target.Value = "LK" Then MsgBox "Dieses Produkt benötigt eine Lebensmittelkühlung!", vbInformation, "Hinweis"
End If
End Sub
oder
Daten → Datenüberprüfung → Datenüberprüfung... → Benutzerdefiniert
=$D$15<>"LK"
Es wird doch angegeben, welche Einträge erlaubt sind und das sind alle, die NICHT "LK" lauten. SONST (also bei "LK") wird die Warnmeldung ausgegeben.
Ja, so wird es sein. Ich dachte nunmal, dass eine Meldung kommen soll, wenn die Bedingung erfüllt ist, nicht dann, wenn sie nicht erfüllt ist.
Tut es. Wollte ich gerade korrigieren, aber Du warst schneller.
Is Not Null ist gängiger SQL-Syntax. Das bringe ich manchmal durcheinander.
Falls das Ereignis sich nur auf D15 bezieht, reicht:
Statt x = Range("D15").Value kann einfacher in Folge dessen Target.Value verwendet werden.