Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Dynamische Buttons ansprechen

Forumthread: Dynamische Buttons ansprechen

Dynamische Buttons ansprechen
27.04.2019 16:10:26
Georg
Hallo,
ich erzeuge mir mit
'Erstellen vom Commandbutton
Set MyCtr2 = Status.Controls.Add("Forms.CommandButton.1")
MyCtr2.Left = plLeft + 30
MyCtr2.Top = plTop
MyCtr2.Width = plWidth * 4.5
MyCtr2.Height = plHeight
MyCtr2.Name = "CommandButton" & i
MyCtr2.Tag = "CommandButton" & i
MyCtr2.Caption = "Test"
mehrere Buttons auf einer Userform (Status). Nun würde ich gerne auch auf den "Commandbutton_Click()" reagieren können.
Ich habe schon versucht unter der Userform "Status" den erstellten Button mit z.b

Private Sub CommandButton1_Click()
MsgBox "funktioniert"
End Sub
an zu sprechen. Dies funktioniert leider nicht, wie mit einem manuell platzieren Button auf der Userform.
Wie werden solche dynamisch erstellten Buttons angesprochen/überwacht?
Ich möchte letzendlich mit dem Klick auf den Button weitere Makros aktivieren können.
Liebe Grüße
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dynamische Buttons ansprechen
27.04.2019 16:17:03
Hajo_Zi
erzeuge Elemente kannst Du nur über Klasse ansprechen.
http://www.hajo-excel.de/vba_userform_klasse.htm

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
Anzeige
AW: Dynamische Buttons ansprechen
27.04.2019 16:21:46
Dieter(Drummer)
Hallo Georg,
versuche es mal so: "UserFormName.CommandButton1.Value = 1"
Gruß, Dieter(Drummer)
AW: Dynamische Buttons ansprechen
27.04.2019 16:28:52
Zwenn
Hallo Dieter,
er will ein Event überwachen. Das geht, wie Hajo schon geschrieben hat, nur mit Klassenprogrammierung.
Viele Grüße,
Zwenn
AW: Danke für Info, Zwenn. owT
27.04.2019 16:33:58
Dieter(Drummer)
Anzeige
AW: Dynamische Buttons ansprechen
27.04.2019 16:37:20
Daniel
Hi
Bei Basiskenntnissen würde ich anstelle der vielen Buttons eine Listbox verwenden.
Der kannst du per AddItem beliebig viele Elemente hinzufügen und dann über das ClickEvent die Makros starten.
Gruß Daniel
AW: Dynamische Buttons ansprechen
28.04.2019 13:39:06
Georg
Hallo Daniel,
naja da ist meine Ansicht etwas anders.
Ich möchte es ja gerne lernen, um VBA auch besser zu können.
Da finde ich ein "Workaround" ist nicht die beste Methode dafür.
Aktuell arbeite ich durch folgende Anleitung:
https://www.online-excel.de/excel/singsel_vba.php?f=52
Aber möglicherweise hat jemand eine Beispielmappe, in der dynamisch ein Button erstellt und überwacht wird. Normale Buttons auf der Userform zu platzieren und diese über Klassen zu überwachen habe ich soweit probiert und weitesgehend verstanden.
Liebe Grüße
Anzeige
AW: Dynamische Buttons ansprechen
28.04.2019 20:23:07
Georg
Hallo Sepp vielen Dank für deine Beispieldatei! Dies hat mir sehr geholfen und ich konnte es in meinem "Projekt" anwenden.
Liebe grüße
;
Anzeige

Infobox / Tutorial

Dynamische Buttons in Excel VBA erstellen und ansprechen


Schritt-für-Schritt-Anleitung

  1. Userform erstellen:

    • Öffne Excel und gehe zu Entwicklertools > Visual Basic.
    • Füge eine neue Userform hinzu, indem Du mit der rechten Maustaste im Projektfenster auf "VBAProject" klickst und Einfügen > UserForm auswählst.
  2. Dynamischen Button erstellen:

    • Füge den folgenden VBA-Code in das Codefenster der Userform ein, um einen CommandButton dynamisch zu erzeugen:
    ' Erstellen vom CommandButton
    Dim MyCtr2 As MSForms.CommandButton
    Set MyCtr2 = Me.Controls.Add("Forms.CommandButton.1")
    MyCtr2.Left = 30
    MyCtr2.Top = 10
    MyCtr2.Width = 100
    MyCtr2.Height = 30
    MyCtr2.Name = "CommandButton1"
    MyCtr2.Caption = "Klick mich"
  3. Button-Klick überwachen:

    • Um auf den Klick des dynamisch erstellten Buttons zu reagieren, benötigst Du Klassenprogrammierung. Erstelle eine neue Klasse (Class1) und füge den folgenden Code hinzu:
    Dim WithEvents Btn As MSForms.CommandButton
    
    Public Sub Init(ByVal Ctl As MSForms.CommandButton)
       Set Btn = Ctl
    End Sub
    
    Private Sub Btn_Click()
       MsgBox "Dynamischer Button wurde geklickt!"
    End Sub
  4. Instanz der Klasse in der Userform:

    • Füge folgenden Code in die Userform ein, um den Button mit der Klasse zu verbinden:
    Dim BtnHandler As Class1
    
    Private Sub UserForm_Initialize()
       Set BtnHandler = New Class1
       BtnHandler.Init(Me.Controls("CommandButton1"))
    End Sub

Jetzt solltest Du in der Lage sein, den dynamisch erzeugten Button zu überwachen und beim Klicken darauf eine Aktion auszulösen.


Häufige Fehler und Lösungen

  • Fehler: Button wird nicht erkannt

    • Stelle sicher, dass Du die Klasse korrekt instanziiert hast und dass der Button-Name übereinstimmt.
  • Fehler: MsgBox erscheint nicht

    • Überprüfe, ob Du das Event korrekt in der Klasse definiert hast und dass die Instanz der Klasse im UserForm_Initialize richtig gesetzt wird.

Alternative Methoden

Falls Du keine dynamischen Buttons verwenden möchtest, kannst Du auch eine ListBox nutzen. Hier ist eine einfache Möglichkeit, eine ListBox zu verwenden, um mehrere Elemente hinzuzufügen und darauf zu reagieren:

Private Sub UserForm_Initialize()
    ListBox1.AddItem "Element 1"
    ListBox1.AddItem "Element 2"
End Sub

Private Sub ListBox1_Click()
    MsgBox "Du hast " & ListBox1.Value & " ausgewählt."
End Sub

Dies ist eine einfachere Methode, um mehrere Optionen zu bieten, ohne viele Buttons zu verwalten.


Praktische Beispiele

  1. Dynamische Buttons mit verschiedenen Aktionen: Du kannst mehrere Buttons dynamisch erstellen, indem Du den oben genannten Code in einer Schleife anpasst:

    Dim i As Integer
    For i = 1 To 5
       Set MyCtr2 = Me.Controls.Add("Forms.CommandButton.1")
       MyCtr2.Name = "CommandButton" & i
       MyCtr2.Caption = "Button " & i
       MyCtr2.Top = 10 + (i - 1) * 40
    Next i
  2. Verwendung von Klassen zur Button-Überwachung: Jedes Mal, wenn Du einen neuen Button erstellst, kannst Du die Klasse verwenden, um das Click-Event zu überwachen.


Tipps für Profis

  • Nutze Fehlerbehandlung in Deinen VBA-Skripten, um unerwartete Probleme zu vermeiden.
  • Kommentiere Deinen Code gut, damit Du und andere ihn später leichter verstehen können.
  • Experimentiere mit verschiedenen Steuerelementen in UserForms, um die Benutzeroberfläche zu optimieren.

FAQ: Häufige Fragen

1. Wie kann ich den dynamischen Button im VBA-Editor sehen? Um sicherzustellen, dass der Button sichtbar ist, musst Du die Userform ausführen. Dynamische Buttons erscheinen nur zur Laufzeit.

2. Kann ich den Button nach dem Erstellen bearbeiten? Ja, Du kannst Eigenschaften wie Caption, Width oder Height jederzeit ändern, indem Du direkt auf die Button-Instanz zugreifst.

3. Ist Klassenprogrammierung in VBA notwendig für dynamische Buttons? Ja, um Events von dynamisch erstellten Steuerelementen zu überwachen, ist es notwendig, Klassen zu verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige