Excel VBA: Schaltfläche die je nach 1., 2., 3. Klick verschiedene Funktionen ausführt?
Hallo zusammen,
ich suche eine Lösung um eine Schaltfläche mit folgender Funktion in meinen Code zu integrieren.
- Klick auf schaltfläche --> Mache X
- Klick auf Schaltfläche --> Mache Y
wie geht das am einfachsten?
_________________________________________________________
Anbei mein Code:
Sub NeuePosHinzu()
'
' NeuePosHinzu Makro
'
'1. Klick
Range("A1:F4").Select
Selection.Copy
Range("B8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' Soll beim 2. Klick auf den Button ausgelöst werden
Range("A1:F4").Select
Selection.Copy
Range("B14").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' Soll beim 3. Klick auf den Button ausgelöst werden
Range("A1:F4").Select
Selection.Copy
Range("B20").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A14:G17").Select
Application.CutCopyMode = False
Selection.Copy
Range("A20:G23").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("A20").Select
ActiveCell.FormulaR1C1 = "Pos. 3"
'Soll beim 4. Klick auf den Button ausgelöst werden
Range("A1:F4").Select
Selection.Copy
Range("B26").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A20:G23").Select
Application.CutCopyMode = False
Selection.Copy
Range("A26:G29").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("A26").Select
ActiveCell.FormulaR1C1 = "Pos. 4"
Range("I21").Select
End Sub
4 Antworten
Also, zunächst möchte ich anmerken, dass ich es eher ungeschickt finde, wenn unterschiedliche Dinge in Abhängigkeit von der Anzahl der Klicks passieren soll. Das ist ein eher verwirrendes Interface. Hast du zwei Mal geklickt und das Telefon klingelt dann, dann weißt du nicht mehr, wo du warst. Mehrere Buttons fände ich da besser.
Aber nun zu deiner Frage. Bei einem Klick muss immer dasselbe Sub aufgerufen werden. Da zählst du dann in einer Variable, der wievielte Klick es ist. Nach dem letzten möglichen Klick, musst du sie dann halt wieder auf 0 setzen.
Welcher Programmteil dann ausgeführt wird, kannst du in Abhängigkeit von der Variable mit einem if oder einem Select festlegen
Danke erstmal! Geschickt finde ich es deshalb, weil ich damit aus einem Berechnungsinterface eine Tabelle / einen Speicher erzeugen möchte, der dann festhält welche Parameter zur Berechnung ausgewählt wurden. Man hat dann am Ende da stehen Position 1 mit xyz, Position 2 mit abc, usw.
Mit einem zweiten Button kann man dann die komplette Liste / den Speicher löschen und eine neue beginnen.
Das Berechnungsinterface verbleibt solange die ganze Zeit an der selben Position.
Hallo, du könntest in der Nähe deiner Schaltfläche (hier Zelle B3) die Schritte zählen, und so steuern:
Sub NeuePosHinzu()
Range("B3") = Range("B3") Mod 3 + 1
Select Case Range("B3")
Case 1
MsgBox ("Schritt1")
Case 2
MsgBox ("Schritt2")
Case 3
MsgBox ("Schritt3")
End Select
End Sub
Statt MsgBox... fügst du deine 3 Schritte ein.
Mit dieser Methode kannst du zur Not auch einen Schritt erzwingen der gerade nicht dran ist, indem du die Zahl in B3 überschreibst
Immer die Caption auf der Schaltfläche Ändern:
Auf dem Knopf steht zunächst:
Null Clicks
dann: bereits 1 Click
dann: bereits 2 Click2
dann: bereits 3 Clicks ->ggf direkt zurück zu "Null Clicks"
im ClickEvent auf den Text des Buttons die unterschiedlichen Aktionen durchführen.
Zählvariable, die die Anzahl der Klicks zählt.
IF-Bedingungen, die je nach Wert in der Variable die entsprechende Funktion aufruft
Wenn alle Funktionen einmal durch sind, Zählvariable zurücksetzen....