Wie erstelle ich in VBA eine MsgBox mit Ja-Nein-Abfrage?
Benötige folgenden VBA Befehl, den ich leider nicht zusammengebastelt bekomme... Wenn in Zelle D15 der Wert "LK" auftaucht, dann MsgBox mit "beliebiger Fragestellung" -> wenn ja, dann Exit und wenn nein, dann "beliebiger Text" anschließend Exit
3 Antworten
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Cells(15, 4).Value = "LK" Then
a = MsgBox("beliebiger Fragestellung", vbYesNo, "beliebiger Titel")
Else
Exit Sub
End If
If a = vbYes Then Exit Sub
MsgBox "beliebiger Text"
End Sub
Sowas?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Antwort
If Not Intersect(Target, Range("D15")) Is Nothing Then
If Target.Value = "LK" Then
Antwort = MsgBox("Dieses Produkt benötigt eine Lebensmittelkühlung! Bitte Bestätigen", 4, "Bestätigung erforderlich")
If Antwort = vbNo Then
MsgBox "NANA, sie wollen sich doch nicht strafbar machen oder?"
Else
End If
End If
End If
End Sub
oki doki, wenn das doch mal weiter gehen sollte einfach Fragen. Ich bin ja nicht der einzige hier der in der Lage ist die zu helfen :))
Naja, das geht auch nicht.
Er prüft ja nur die Eingabe in Zelle D15. Ich will mal sehen ob ich auf die schnelle eine Lösung finde.
Der Intesect-Befehl
If Not Intersect(Target, Range("D15")) Is Nothing Then
muss alle Zellen einschließen, deren Änderung eine Änderung in der Berechnung des SVerweis hervorrufen kann.
Naja, eventuell kannst du das ja auch dann direkt über eine Function machen. Das würde dann so gehen das du dir ein Modul anlegst und da folgenden Code anlegst:
Function Frage()
Dim Antwort
Antwort = MsgBox("Dieses Produkt benötigt eine Lebensmittelkühlung! Bitte Bestätigen", 4, "Bestätigung erforderlich")
If Antwort = vbNo Then
MsgBox "NANA, sie wollen sich doch nicht strafbar machen oder?"
Else
End If
End Function
Dann in irgendeine Zelle folgenden Code schreiben:
=WENN(D15="LK";Frage();"")
Und diese Zelle dann schriftart Weiß
Brauche noch bitte ein Befehl dazu!
Wir hatten zum Schluss folgendes aufgebaut ...
If Antwort = vbNo Then
MsgBox "NANA, sie wollen sich doch nicht strafbar machen oder?"
anschließen muss der Anwender nach dieser MsgBox auf "ok" drücken!
DANN soll allerdings die Zelle "D10" automatisch gelöscht werden.
Wie kann ich das mit einbauen?
Naja, da eine Function keine Makro Codes ausführen kann, das müsste man dann wieder über umwege laufen lassen, würde ich dir raten doch lieber folgenden Code in Deine Tabelle direkt zu setzen:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Antwort
If Not Intersect(Target, Range("D10")) Is Nothing Then
If Target.Value = "LK" Then
Antwort = MsgBox("Dieses Produkt benötigt eine Lebensmittelkühlung! Bitte Bestätigen", 4, "Bestätigung erforderlich")
If Antwort = vbNo Then
MsgBox "NANA, sie wollen sich doch nicht strafbar machen oder?"
Range("D10").ClearContents
Else
End If
End If
End If
End Sub
Dieser überwacht jetzt nicht Zelle D15 sondern die Zelle D10, denn von da kommt ja nach deiner Aussage der Wert.
Oder du musst bis heute Abend warten:))
Also, in der Function ist es nicht möglich. Da bleibt uns nur diese Möglichkeit. Aber was mir da einfällt, du hast geschrieben das der Wert in D15 aus einem Sverweis kommt, dann steht in D10 ja auch nicht direkt LK drin oder? Wenn ich das richtig verstehe steht in D10 ja was anderes und in D15 der Sverweis.
Wenn das der Fall ist müssen wir das mit diesem Code direkt in der Tabelle machen. Hier hat der Anwender jetzt noch einmal die Möglichkeit doch noch die Bestätigung mit Ja zu beantworten :))
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$15" And Target.Value = "LK" Then
Msg = "Dieses Produkt benötigt eine Lebensmittelkühlung! Bitte Bestätigen"
Ans = MsgBox(Msg, vbQuestion + vbYesNo)
Select Case Ans
Case vbYes
Cancel = True
Case vbNo
Msg = "NAJA, wollen Sie wirklich Abrechen?"
Ans = MsgBox(Msg, vbQuestion + vbYesNo)
Select Case Ans
Case vbYes
MsgBox "OK, die Eingabe wird jetzt zurückgesetzt"
Range("D10").ClearContents
Case vbNo
Msg = "OK, wollen Sie jetzt Bestätigen das dieses Produkt eine Lebensmittelkühlung benötigt?"
Ans = MsgBox(Msg, vbQuestion + vbYesNo)
Select Case Ans
Case vbYes
Cancel = True
Case vbNo
MsgBox "Ich werde das ganze hier jetzt Abrechen und die Eingaben zurücksetzen"
Range("D10").ClearContents
End Select
End Select
End Select
End If
End Sub
Hilft dir das so weiter?
Ha das geht doch nicht. Sorry aber ich habe dafür Heute keine Zeit mehr. Wenn ich morgen Zeit habe schaue ich mir das gerne nochmal an.
Es gebe eventuell eine Möglichkeit ein SVERWEIS_Vlookup in VBA einzubauen welches den Verweis dann als Text in D15 ablegt, damit könnte man dann arbeiten. Dafür müsste man aber genau wissen wo und in welchem Bereich deine SVERWEIS abfage läuft.
Sorry das ich nicht gleich helfen konnte, jetzt habe ich leider keine Zeit mehr. Morgen Abend werde ich mich da mal ran machen wenn dir das reicht?
Ich glaube ich muss diese Funktion weg lassen, da mehrere Zellen habe und es zu kompliziert wird. Danke trotzdem!
Den Sinn hinterfrage ich mal nicht, aber die 1:1-Umsetzung sieht so aus:
Sub MsgBoxSpecial() If Range("D15").Value = "LK" Then If MsgBox("Ja oder nein?", vbYesNo + vbDefaultButton1, "Ja-Nein-Frage") = vbYes Then Exit Sub Else MsgBox "Beliebiger Text" Exit Sub End If End If End Sub
Suboptimierer, es würde ewig dauern dir den Sinn zu erklären... lassen wir es lieber ;-) Danke für die schnelle Antwort
Okey, wenn dir damit geholfen ist, dann hake ich auch nicht nach. ;-)
DH! auf die Idee, VbYesNo etc auf diese Art und Weise ohne Variable auszuwerten, bin ich noch nicht gekommen!
Andererseits würde ich hier die einzeilige if-then Variante (ohne Else und End if) verwenden, die Aktion ist ja mit nur wenigen und weiters unbedingt aufeinander folgenden Befehlen auszuführen, die mit : aneinandergehängt werden können.
Jepp, es gibt Optimierungspotenzial.
Ich traue mich jedoch nicht, zum Beispiel die Exit Subs dem Fragesteller abzusprechen, weil ich den Kontext nicht kenne.
So hat der Fragesteller noch etwas zum Basteln. Dadurch erschließt sich einem oft einiges.
bei der einzeiligen Variante können weitere Befehle. mit jeweils Doppelpunkt, hier als :Exit Sub angehängt werden!
es scheint so zu sein, dass die Syntax mit Zeilenumbruch nach then die Normalvariante, ohne Zeilenumbruch die einzeilige Variante aufruft.
Dein Befehl funktioniert hervorragend wenn ich in Zelle (D15) den Wert "LK" manuell eingebe, allerdings funktioniert es nicht wenn der Wert "LK" durch eine SVerweis Formel hervorgerufen wird ... woran kann es liegen?