Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Welcher Button wurde geklickt?

Welcher Button wurde geklickt?
30.07.2008 11:54:14
gerwas
Hallo Leute
Ich habe hier ein ExcelArbeitsblatt auf dem sich viele Buttons befinden. Wie kann ich per Makro herausbekommen, welchen Button der User geklickt hat?
Ähnlich der Ereignisauswertung Worksheet_Change(ByVal Target As Range).
Gibts so etwas? Ich brauche den Namen des Buttons für die weitere Bearbeitung in dem an dem Button geknüpften Macro.
Das soll dann in etwa so aussehen:

Sub Button_geklickt()
If Button.Name="3055" then Call code3055
ElseIf Button.Name="3087" Then Call code3087
End If
End Sub


Gerwas

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Welcher Button wurde geklickt?
30.07.2008 11:57:27
mpb
Hallo,
den Satz " Ich brauche den Namen des Buttons für die weitere Bearbeitung in dem an dem Button geknüpften Macro." verstehe ich nicht. Was willst Du denn da noch abfragen, es ist doch eindeutig, dass der Button angeklickt wurde, mit dem der Code verknüpft ist. Villeicht kannst Du das noch einmal erläutern.
Gruß
Martin

Anzeige
AW: Welcher Button wurde geklickt?
30.07.2008 12:42:33
gerwas
Wie schon gesagt, das ExcelSheet hat viele Buttons. Die werden alle per VBA erzeugt und allen wird das Macro "mp_open" zugewiesen. Wenn ich jedem Button ein eigenes Macro zuweisen wollte müßte ich ja per VBA VBA-Code erzeugen...
Der Hintergrund ist der: Durch Klick auf den Button soll eine txtdatei erzeugt werden die als Datenquelle für eine Dokumentvorlage dient. Je nachdem welcher Button gedrückt wird ist der Inhalt der txtdatei anders. Die Dokumentvorlage liest beim Öffnen die txtdatei und füllt dann entsprechende Felder je nach deren Inhalt.
ich erzeuge die Buttons in einer Schleife wie folgt:
ActiveSheet.Buttons.Add(ActiveCell.Left, ActiveCell.Top, ActiveCell.Width, ActiveCell.Height * 2).Select
Selection.OnAction = "mp_open"
Selection.Name=gerät & "_" & bereich & "_" & nummer

Das funktioniert! Versuche ich aber dem OnAction-Macro Parameter zu übergeben kommt einen Fehlermeldung!
Selection.OnAction = "mp_open_mit_parametern " & gerät & "," & bereich & "," & nummer
Deshalb bin ich auf die Idee mit dem Namen gekommen. Nur ich kann ihn nicht auslesen, weil ich nicht weiss, welcher Button geklickt wurde...
Gerwas

Anzeige
AW: Welcher Button wurde geklickt?
30.07.2008 12:48:00
Rudi
Hallo,

Sub makro()
MsgBox ActiveSheet.Shapes(Application.Caller).Name
End Sub


Gruß
Rudi

AW: Welcher Button wurde geklickt?
30.07.2008 16:33:00
gerwas
Rudi du bist der größte! Genau das habe ich gesucht!!

AW: Welcher Button wurde geklickt?
30.07.2008 12:48:00
Heiko
Hallo Gerwas,
für solche Fälle gibt es diesen Befehl:
Application.Caller
Er gibt den Namen des Buttons zurück wenn du Ihn in den Code "hinter" den Buttons einfügst.
Gruß Heiko
PS: Rückmeldung wäre nett !

Anzeige
AW: Welcher Button wurde geklickt?
30.07.2008 15:21:44
gerwas
Danke Heiko - es funktioniert

AW: Welcher Button wurde geklickt?
30.07.2008 16:32:10
gerwas
Danke Heiko - es funktioniert
;
Anzeige
Anzeige

Infobox / Tutorial

Ermitteln des geklickten Buttons in Excel VBA


Schritt-für-Schritt-Anleitung

Um den Namen des geklickten Buttons in Excel VBA zu ermitteln, kannst du die Application.Caller-Funktion verwenden. Diese gibt dir den Namen des Buttons zurück, der das Makro ausgelöst hat. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Erstelle einen Button in deinem Excel-Arbeitsblatt.

  2. Öffne den VBA-Editor (drücke ALT + F11).

  3. Füge ein neues Modul hinzu:

    • Rechtsklick auf „VBAProject (DeineArbeitsmappe)“.
    • Wähle „Einfügen“ > „Modul“.
  4. Füge den folgenden Code ein:

    Sub Button_Clicked()
       MsgBox "Der geklickte Button heißt: " & Application.Caller
    End Sub
  5. Weise das Makro dem Button zu:

    • Rechtsklick auf den Button > „Makro zuweisen“.
    • Wähle Button_Clicked aus der Liste.
  6. Teste es: Klicke auf den Button und ein Nachrichtenfeld zeigt dir den Namen des geklickten Buttons.


Häufige Fehler und Lösungen

  • Fehler: „Method 'Caller' of object 'Application' failed“

    • Lösung: Stelle sicher, dass du die Application.Caller-Funktion innerhalb des Makros aufrufst, das dem Button zugewiesen ist.
  • Fehler: Button-Namen nicht korrekt angezeigt

    • Lösung: Überprüfe, ob der Button tatsächlich mit dem richtigen Makro verknüpft ist.

Alternative Methoden

Wenn du mehrere Buttons hast und unterschiedliche Aktionen basierend auf dem geklickten Button ausführen möchtest, kannst du die Selection.OnAction-Eigenschaft verwenden, um das Makro dynamisch zu steuern. Hier ist ein Beispiel:

Sub Button_geklickt()
    Dim ButtonName As String
    ButtonName = Application.Caller

    If ButtonName = "Button1" Then
        Call CodeForButton1
    ElseIf ButtonName = "Button2" Then
        Call CodeForButton2
    End If
End Sub

Praktische Beispiele

Hier ist ein Beispiel, wie du mehrere Buttons mit unterschiedlichen Makros verknüpfen kannst:

Sub ButtonErstellen()
    Dim Button As Object
    Set Button = ActiveSheet.Buttons.Add(100, 100, 100, 50)
    With Button
        .OnAction = "Button_geklickt"
        .Name = "Button1"
        .Text = "Klick mich!"
    End With
End Sub

Wenn der Benutzer auf „Klick mich!“ klickt, wird der Name des Buttons über Application.Caller ermittelt und die entsprechende Aktion ausgeführt.


Tipps für Profis

  • Verwende konventionelle Benennungen für deine Buttons, um die Lesbarkeit im Code zu erhöhen.
  • Kommentiere deinen Code, um später leichter nachvollziehen zu können, welche Aktion welcher Button ausführt.
  • Nutze die Debugging-Tools im VBA-Editor, um Probleme schnell zu identifizieren.

FAQ: Häufige Fragen

1. Wie kann ich den Namen eines Buttons in einer Schleife erstellen? Du kannst eine Schleife verwenden, um mehrere Buttons zu erstellen und ihnen Namen zuzuweisen:

Sub ButtonsErstellen()
    Dim i As Integer
    For i = 1 To 5
        ActiveSheet.Buttons.Add(10, 10 + (i - 1) * 60, 100, 50).Name = "Button" & i
    Next i
End Sub

2. Kann ich Parameter an das Makro übergeben? Ja, du kannst Parameter über den Button-Namen übergeben. Zum Beispiel:

Selection.OnAction = "Button_geklickt '" & gerät & "', '" & bereich & "', '" & nummer & "'"

Mit diesen Anleitungen kannst du nun effektiv den Namen des geklickten Buttons in Excel VBA ermitteln und deine Makros entsprechend anpassen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige