Excel Makro - Button erstellen in Zelle A, Zählung der Klicks in Zelle B?
Moin liebe Excel Experten, ich bräuchte mal eure Hilfe.
Und zwar will ich ein Makro erstellen, dass folgendes bewirkt.
Ich will bspw. in Zelle A4 drauf klicken und das System soll dann in Zellen V4 pro Klick immer +1 rechnen.
Das will ich dann natürlich auch für A5, A6, A7 und so weiter.
Kann mir da einer ne Lösung anbieten?
Falls ja, bedanke ich mich schon vorab, ihr würdet mir damit sehr helfen! 🙏🏻
1 Antwort
Die einfachste Variante wäre, wenn du "Drehfelder" in deine Tabelle einfügst. Das sind Steuerelemente mit einem Knopf nach oben und einem Knopf nach unten und je nachdem auf welchen du klickst, wird hoch oder runter gezählt. Du kannst ein Drehfeld mit einer Zelle verbinden, indem du einen rechtsklick auf das Drehfeld machst, dann auf "Steuerelement formatieren..." klickst und im Reiter "Steuerung" eine Zelle in das Feld "Zellverknüpfung" einträgst.
Der Nachteil dieser Drehfelder ist, dass nicht einstellen kann, dass nur der Button für hochzählen angezeigt werden soll.
Die Variante mit einfachen Buttons und VBA-Code hat aber auch Nachteile:
- Falls du die Excel-Tabelle z.B. per Mail versenden willst, wird die Mail in den meisten Fällen abgelehnt, weil Outlook z.B. gar keine Office-Dateien mit Makros zulässt.
- Die Buttons haben leider so einen großen Abstand zwischen Text und Rand, dass man die Beschriftung nicht mehr sieht, wenn man den Button in eine Zelle reinquetscht
- Alle Steuerelemente lassen sich frei positionieren, so dass man z.B. nicht sagen kann, dass eine bestimmte Zelle ein Button sein soll. Viele Buttons per Hand irgendwo hinzuschieben ist ziemlich viel Fummelkram
- Man kann in VBA leider nicht sagen, dass alle Buttons eine gemeinsame Ereignisprozedur aufrufen sollen, sondern jeder Button kriegt seine eigene Prozedur (allerdings kann man von da aus natürlich eine gemeinsame Prozedur aufrufen)
Naja, ich hab dir trotzdem mal was in VBA gebaut, was dir in die Zellen A2:A100 jeweils einen Button mit einem "+" reinmacht (eigentlich sind es Labels und keine Buttons, damit man das + auch sehen kann) und wenn man raufklickt, wird in Spalte V jeweils der Wert, der zu dem Button gehört, erhöht.
- Öffne den VBA-Editor (Alt + F11)
- Mache in dem Projektexplorer einen Doppelklick auf deine Tabelle
- Rechts geht ein Codefenster auf. Füge da diesen Code ein:
Option Explicit
Public Sub Buttons_erstellen()
Dim code As String
code = vbCrLf & "'##### Automatisch generierter Code für die Buttons #####" & vbCrLf
Dim i As Integer
For i = 2 To 100
Dim ole As OLEObject
Set ole = OLEObjects.Add( _
ClassType:="Forms.Label.1", _
Left:=15, _
Top:=(i - 1) * 15, _
Width:=30, _
Height:=15 _
)
ole.Name = "lblA" & i
Dim lbl As MSForms.label
Set lbl = ole.Object
lbl.Caption = "+"
lbl.SpecialEffect = fmSpecialEffectRaised
lbl.BackColor = &H8000000F
lbl.TextAlign = fmTextAlignCenter
code = code _
& vbCrLf _
& "Private Sub lblA" & i & "_Click()" & vbCrLf _
& " Label_Click lblA" & i & vbCrLf _
& "End Sub" & vbCrLf _
& vbCrLf _
& "Private Sub lblA" & i & "_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)" & vbCrLf _
& " Label_MouseDown lblA" & i & ", Button, Shift, X, Y" & vbCrLf _
& "End Sub" & vbCrLf _
& vbCrLf _
& "Private Sub lblA" & i & "_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)" & vbCrLf _
& " Label_MouseUp lblA" & i & ", Button, Shift, X, Y" & vbCrLf _
& "End Sub" & vbCrLf
Next i
Dim modul As Object
Set modul = ThisWorkbook.VBProject.VBE.ActiveCodePane.CodeModule
modul.InsertLines modul.CountOfLines + 1, code
End Sub
Sub Buttons_loeschen()
Shapes.SelectAll
Selection.Delete
End Sub
Private Sub Label_Click(Sender As Object)
Dim Zelle As Range
Set Zelle = Range("V" & Mid(Sender.Name, 5))
Zelle.Value = Zelle.Value + 1
End Sub
Private Sub Label_MouseDown(Sender As Object, ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Sender.SpecialEffect = fmSpecialEffectSunken
End Sub
Private Sub Label_MouseUp(Sender As Object, ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Sender.SpecialEffect = fmSpecialEffectRaised
End Sub
- Klicke in die Funktion "Buttons_erstellen()" und drücke F5
Nicht wundern, wenn die Funktion durchgelaufen ist, sind untendrunter haufenweise neue Subs für die ganzen Buttons