Vba Zellenwert von einer anderen Zelle abziehen?

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
pocahontas19 
Fragesteller
 18.07.2018, 17:07

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?

0
Suboptimierer  18.07.2018, 17:27
@pocahontas19

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.

0