5.5k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo erstmal liebe Excel Experten
Ich soll für meinen Chef eine Kassenbuchvorlage erstellen. Was so kein Problem ist. Jetzt will der aber das. wenn der Wert in Spalte Bestand(Wert aus Einnahme - Ausgabe +Bestand voherige Zeile) ins negative rutscht, eine MsgBox aufgeht, welche nach klick auf ok die letzte Eingabe zurücksetzt. Nun habe ich folgendes Probiert
VBA Modul erstellt
Function Alarm()
MsgBox "Negative Werte im Bestand sind unzulässig" ,VbInformation , "Falsche Eingabe"
End Function
Dann habe ich Hilfszelle benutzt und folgende Formel benutzt
=Wenn(ZelleBestand<o;Alarm();"")
Irgendwie funzt das aber net, wenn ich einen negativen Wert erreiche erscheint in der Hilfszelle Name statt der MsgBox.
Bin am verzweifeln, und hoffe es kann mir jemand helfen, dafür schon mal vielen Dank im vorraus.

31 Antworten

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo,

wenn du deine Wenn-Formel aus deiner Zelle kopiert hast, so hast statt Null ein o eingefügt.

Mit

=Wenn(ZelleBestand<0;Alarm();"")

funktioniert es.

Gruß

M.O.
0 Punkte
Beantwortet von
Danke für die schnelle Antwort, aber das war ein Schreibfehler, in der Formel steht eine 0.
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo,

ist denn der Name der Zelle richtig definiert?

Ich habe es mal bei einer Tabelle probiert und dort klappt es.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.
Vielen Dank für deine Mühe, hab Lösung hinbekommen,
und zwar mit folgendem VBA Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Application.WorksheetFunction.Max(Range("G12")) < 0 Then
MsgBox "letzter Wert fehlerhaft! ", vbCritical, "Achtung negativer Kassenbestand"
End If
End Sub
so funktioniert es, nur das mit dem löschen der letzten Eingabe muss ich hinkriegen.
Nochmals Danke
0 Punkte
Beantwortet von
Hallo mathew256,
dann vielleicht so:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Sheets(1).Range("G12") < 0 Then
MsgBox "letzter Wert fehlerhaft! ", vbCritical, "Achtung negativer Kassenbestand"
Dim pos
pos = ActiveCell.Address
Range(pos) = ""
End If
End Sub

Gruß
fedjo
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Mathew,

zum Zurücksetzen kannst du Application.Undo verwenden:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$B$1" Or Target.Address = "$B$2" Then '<== Eingabezellen anpassen
Application.EnableEvents = False
If Range("G12") < 0 Then
MsgBox "letzter Wert fehlerhaft! ", vbCritical, "Achtung negativer Kassenbestand"
Application.Undo
End If
Application.EnableEvents = True
End If
End Sub

Bis später,
Karin
0 Punkte
Beantwortet von
Hallo Leute
Dank an Karin und Fedjo
Fedjo mit deinem Code lässt sich die MsgBox nicht mehr schließen, und excel muss mit Taskmanager geschlossen werden.Und ich lösche die Aktive Zelle, welche ja nicht die richtge ist, denn ich hab ja eine Eingabe gemacht, und die Rutine schlägt zu wenn ich die Eingabezelle bereits verlassen habe.

Karin dein Code ist meiner Meinung nach korrekt, leider funzt er noch nicht. Liegt bestimmt daran das ich die Eingabezellen nicht richtig angepasst habe. In dem speziellen Fall sind die Einnahmen in Spale D12-D42, die Ausgaben in Spalte E12-E42 und der Kassenbestand in Spalte G12-G42. Werde es nachher nochmal probieren, und melde mich dann nochmal. Muss erst mal schnell Einkaufen, denn bei Praktiker gibt es Farbe mit 25% Rabatt und ich muss dringend meine Bude malern.

Vielen Dank euch beiden,bis später
mathew
0 Punkte
Beantwortet von
Hallo mathew ,
hatte den Code vorher nicht getestet.
Mit SendKeys kannst du auch den letzten Schritt rückgängig machen.

Gruß
fedjo

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Sheets(1).Range("G12") < 0 Then
MsgBox "letzter Wert fehlerhaft! ", vbCritical, "Achtung negativer Kassenbestand"
Application.SendKeys "^z", True
ActiveCell = ""
End If
End Sub
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Meathew,

ich hoffe, dein Einkauf hat sich gelohnt ;-))))

Versuche es mal mit diesem Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("D12:D42", "E12:E42")) Is Nothing Then
Application.EnableEvents = False
If Cells(Target.Row, 7) < 0 Then
MsgBox "letzter Wert fehlerhaft! ", vbCritical, "Achtung negativer Kassenbestand"
Application.Undo
End If
Application.EnableEvents = True
End If
End Sub

Bis später,
Karin
0 Punkte
Beantwortet von
Hallo Karin und Fedjo
Einkauf hat sich gelohnt :-))
Karin dein letzter Code funzt super, vielen Dank für die Hilfe an euch beide, alleine hätte ich das nie hinbekommen. So da das Problem gelöst ist werde ich wohl streichen müssen,schade ich dacht ich komm drum herum. Also nochmald Danke und ein schönes Wochende noch.

mathew
...