Vba Zellenwert von einer anderen Zelle abziehen?
Hallo zusammen,
Ich habe ein kleines Problem was ich leider nicht lösen kann. Im Bereich vba bin ich leider auch nicht so fitt & verstehe die meisten codes nicht & kann mir daraus leider auch keinen eigenen basteln.
Mein Problem:
Zelle A1 steht eine Meter Angabe von z.b 300
In Zelle B1 ist die Entnahme 30
Nun soll automatisch in Zelle A1 der Betrag 170 stehen.
Leider weiß ich nicht wie ich das hinbekomme.
Die Zelle A1 ist variable und soll jede Zeit manuell geändert werden. Deshalb sollte dies mittels vba geschehen.
Kann mir jemand helfen?
Vieeeelen Daaaank
1 Antwort
Versetz dich mal in unsere Lage und versuch neutral deine eigene Frage zu verstehen.
Du hast in A1 300 und in B1 30 und dann soll in A1 170 stehen? Da fehlt irgendwie der Zusammenhang. Wie kommt man denn auf den Sollwert?
Du schreibst etwas von "Zelle abziehen". Wo stehen denn die übrigen 100, die noch abgezogen werden sollen?
... oder ist das ein Tippfehler und da soll 270 stehen?
Dann wäre es leicht:
Range(A1).Value = Range(A1).Value - Range(B1).Value
Oh da musst du etwas aufpassen. Du fängst ein Ereignis ab.
Das Ereignis bezieht sich zunächst auf jede Zelle des Arbeitsblatts und wird jedesmal ausgelöst, wenn du die Markierung änderst, zum Beispiel jedesmal, wenn du auf eine andere Zelle klickst.
Das am häufigsten abgefangene Ereignis ist Worksheet_Change.
Aber auch hier musst du aufpassen. Es wird ausgelöst, sobald irgendwo auf dem Arbeitsblatt eine Änderung stattfindet.
Deswegen solltest du die Zellen definieren, bei deren Änderung das Ereignis auslösen soll. Beispiel (ungetestet):
Sub Worksheet_Change(target As Range) if target.Address = "$B$1" Then _ Range("A1").Value = Range("A1").Value - Range("B1").Value End Sub
Besonders tricky wird es, wenn die Zelle, mit der das Ereignis ausgelöst (verarbeitet) werden soll, innerhalb der Verarbeitung geändert wird. Dadurch entstünde eine Endlosschleife. Das Ereignis würde sich selbst auslösen.
In so einem Fall müsstest du für die Verarbeitung die Ereignisbehandlung ausschalten und auch Exceptions abfangen:
On Error Goto Fehler Application.EnableEvents = False ... Fehler: Application.EnableEvents = True On Error GoTo 0
________________________
Wenn du erstmal nur üben willst, würde ich mir einfach einen CommandButton auf das Arbeitsblatt legen und das Click-Ereignis abfangen.
OOh ich meinte 270 sorry. War wohl wieder zu hastig mit dem abschicken.
Super Danke. Jetzt ist nur die frage schreibe ich das bei private sub worksheet_selection Change(ByVal Target as Range) oder was für ein "Titel" brauche ich dazu?