Per Button Wert erhöhen in Excel VBA - Offset Funktion?
Hallo ihr Lieben,
mal wieder bin ich dabei, für die Arbeit ein Excel-Sheet zur Erleichterung zu basteln.
Diesmal möchte ich eigentlich etwas recht Simples: Per Buttonklick auf - oder + soll der Wert einer Zelle entweder um 1 erhöht oder verringert werden. Die betroffene Zelle steht in jeder Zeile zwischen den zwei Buttons (siehe Screenshot). Um nicht für jeden Button eine eigene Funktion schreiben zu müssen, wollte ich hier mit Offset der Zelle, in der der Button liegt, arbeiten, aber irgendwie bekomme ich es syntaktisch nicht hin und bitte deswegen um Rat, wie ich das realisieren kann.
Würde mich freuen, wenn jemand die Lösung für mich hat. Vielen Dank bereits im Voraus!
Lg Lego

2 Antworten
Ich empfehle dir, einen Spinbutton (Drehfeld) zu verwenden. Das erspart dir eine Menge Aufwand.
Bei der ActiveX-Variante kannst du dieses Drehfeld auch als links-rechts-Variante darstellen, indem du die Maße des Buttons in die Länge ziehst.

Ich finde zwar die Lösung von PauleVBA noch eleganter, aber trotzdem vielen Dank für die Auszeichnung.
Folgender Vorschlag:
Lösche alle Buttons auf deinem Tabellenblatt (Sheet)
Färbe die Cellen C2 bis C... Grau, formatiere diese Zellen:
Ausrichtung Horizontal und Vertikal Zentriert
Rahmen darum
Schutz = Haken (ja)
Selber Vorgang für E2 bis E...
Inhalt '- oder '+ (Hochkomma und Minus oder Plus)
Nun sollte die Zelle einem Button ähnlich sehen
Jetzt markierts du noch die Werte-Zellen (D2 bis D...)
diese stellst du über Format Zellen auf Schutz nein (kein Haken)
Jetzt den Blattschutz einschalten.
dann schreibst du noch folgenden Code in den Code-Bereich des Blattes (Tablle1?):
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'MsgBox Target.Address
If Target.Column = 3 Then
Target.Offset(0, 1) = Target.Offset(0, 1) - 1
' "Button" verlassen
ActiveCell.Offset(0, 1).Activate
ElseIf Target.Column = 5 Then
Target.Offset(0, -1) = Target.Offset(0, -1) + 1
' "Button" verlassen
ActiveCell.Offset(0, -1).Activate
End If
End Sub
Und schon funzt es.
Das ActiveCell.Offset(0, -1).Activate und ActiveCell.Offset(0, 1).Activate dient nur dazu, die Zelle zu verlassen, damit man mehrfach hintereinander den selben "Button" drücken kann.
Hoffe es hilft
Hey, ich habe deinen Vorschlag leider nicht ausprobiert, da ich es zu dem Zeitpunkt bereits mit dem Drehfeld gelöst hatte, das in der ersten Antwort vorgeschlagen wurde.
Da deine Lösung aber jemandem gefällt, nehme ich an, sie funktioniert genauso gut. Daher Daumen hoch für dich :)
Lg
Nachdem ich gegegoogelt hatte, wo ich das Drehfeld finde (die Entwicklertools waren bei mir nicht an) habe ich mit dieser Lösung erreicht, was ich wollte. Vielen Dank! :)