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.8k Punkte)

Hallo Björn,

dann versuch es mal so:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim rngBereich As Range

Set rngBereich = Application.Union(Range("Rng_Einnahmen"), Range("Rng_Ausgaben"))

If Not Intersect(Target, rngBereich) Is Nothing Then
Application.EnableEvents = False
If Cells(Target.Row, 9).Value < 0 Then           'Kassenbestandt steht in Spalte I = 9
MsgBox "letzter Wert fehlerhaft! ", vbCritical, "Achtung negativer Kassenbestand"
Application.Undo
End If
Application.EnableEvents = True
End If
End Sub


Gruß
M.O.
0 Punkte
Beantwortet von
Hallo m-o,

ich habe es direkt ausprobiert.

Leider funktioniert es auch nicht.

Es wird mir auch keine Fehlermeldung angezeigt.

Gruß

Björn
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Björn,

kannst du mal deine Beispieltabelle hochladen? Wie das funktioniert, kannst du hier nachlesen: Anleitung

Gruß

M.O.

0 Punkte
Beantwortet von

Hallo m-o,

hier die Beispieltabelle.

Ich hoffe es funktioniert..

Gruß,

Björn

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Björn,

in deiner Beispieldatei ist mir aufgefallen, dass es Namen für Bereiche mehrfach gibt, die sich auf verschiedene Arbeitblätter bzw. auch auf mehrere Arbeitsblätter beziehen (wenn ich das richtig sehe). Daher würde ich den Bereich, der überwacht werden soll, absolut adressieren:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

If Not Intersect(Target, Range("F2:G35")) Is Nothing Then
Application.EnableEvents = False
If Cells(Target.Row, 9).Value < 0 Then           'Kassenbestandt steht in Spalte I = 9
MsgBox "letzter Wert fehlerhaft! ", vbCritical, "Achtung negativer Kassenbestand"
Application.Undo
End If
Application.EnableEvents = True
End If
End Sub

Dann funktioniert das Makro auch, sobald in der Spalte Kasse der Betrag negativ wird (der Bestand Konto wird jedoch nicht geprüft). Willst du mit Bereichsnamen arbeiten, dann sollten die Namen eindeutig sein und sich nur auf Bereiche in dem jeweiligen Arbeitsblatt beziehen.

Gruß

M.O.

0 Punkte
Beantwortet von

Hallo m-o,

habe deinen Rat befolgt und habe für den Bereich den ich brauche neue, eindeutige Namen vergeben.

Leider ist es aber immer noch so, dass er mir zwar eine Box mit Meldung anzeigt, wenn ich manuell einen Negativwert eingebe, jedoch nicht wenn es sich automatisch errechnet.

Ich verlinke hier nochmal die neue Datei,

Gruß,

Björn

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Bjorn,

du kannst nicht die rng_Kasse überprüfen, da die Werte in diesem Bereich ja von einer Formel ermittelt werden, und dann funktioniert - wie du ja festgestellt hast - die Worksheet_Change-Methode nicht (siehe auch meine Antwort vom 3. November). Statt dessen musst die die Spalten mit den Einnahmen und Ausgaben überwachen!

Hier das bearbeitete Beispiel: Download

Gruß

M.O.

0 Punkte
Beantwortet von

Hallo m-o,

vielen vielen Dank.

Es schient zu funktionieren.

Das mit den Formeln habe ich soweit verstanden wusste nur nicht wie ich es anwenden muss.

Jetzt gibt es nur leider noch ein kleines Problem (chen) damit.

Es kann ja vorkommen, dass man im Nachhinein eine Änderung vornehmen muss, weil man sich vielleicht vertan hat o.ä.

In der Mappe schlägt die Box aber nur an, wenn sich in der spalte ein negativer Wert zeigt, in der man gerade gearbeitet hat. Sie sollte aber am besten immer anschlagen wenn hier ein negativer Wert in der Spalte ist. Kann man das so einrichten, das er das auch macht? Ich denke eher wohl nicht, da ja immer alle werte aus den beiden Spalten bis zum ende gerechnet werden. Oder?

Zugegeben, dass ist jetzt ein Luxusproblem, da dies ja nicht bis kaum vorkommen sollte oder man dann auch selber aufpassen kann.

Ich denke in der Mappe wird es nochmal verständlicher.

Gruß,

Björn

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Björn,

auch das ist möglich. Hier die geänderte Beispieldatei: Download

Gruß

M.O.

0 Punkte
Beantwortet von
Hallo m-o,

echt super.

Wirklich vielen lieben Dank.

Das macht die ganze Sache wirklich einfacher und übersichtlicher.

Ich werde heute versuchen das in meine Originaldatei einzubauen.

Lieben Gruß,

Björn
...