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

Forumthread: Welcher CommandButton wurde gedrückt? Schleife?

Welcher CommandButton wurde gedrückt? Schleife?
16.07.2019 16:00:41
Sonja
Hallo ihr Lieben,
hoffe ihr könnt und wollt mir helfen ;-)
Ich habe eine UserForm mit insgesamt 16 CommandButtons. Je nach dem welcher Button gedrückt _
wurde, möchte ich in eine entsprechende Zeile schreiben. Hoffe die Problemstellung ist verstä _
ndlich.
Private Sub CommandButton1_Click()
CMB = 1
Worksheets(2).Cells(CMB, 10) = CMB
End Sub
Private Sub CommandButton2_Click()
CMB = 2
Worksheets(2).Cells(CMB, 10) = CMB
End Sub
Private Sub CommandButton3_Click()
CMB = 3
Worksheets(2).Cells(CMB, 10) = CMB
End Sub
Private Sub CommandButton ... _Click()
CMB = ...
End Sub

Kann man dies irgendwie mit einer Art Schleife kürzer fassen?
Vielen Dank schon mal
Gruß Sonja
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Klassenprogrammierung
16.07.2019 16:26:17
Rudi
Hallo,
füge ein Klassenmodul ein.
Name: clsButton
Code:
Option Explicit
Public WithEvents myButton As MSForms.commandbutton
Private Sub myButton_Click()
MsgBox myButton.Caption
End Sub

In der UF z.B.:
Option Explicit
Dim objButton(1 To 16) As New clsButton  '16 Commandbuttons
Private Sub UserForm_Initialize()
Dim objControl As Control, i As Integer
For Each objControl In Me.Controls
If TypeName(objControl) = "CommandButton" Then
i = i + 1
Set objButton(i).myButton = objControl
With objButton(i).myButton
.Caption = i
End With
End If
Next
End Sub
Gruß
Rudi
Anzeige
AW: Klassenprogrammierung
17.07.2019 21:06:20
Sonja
Hey Rudi,
vielen Dank. Leider sind meine VBA Kenntnisse noch nicht bis zur Anwendung von Klassen vorgedrungen. Daher kann ich deinen Code nicht so ganz verstehen. Werde dies als Hausaufgabe mitnehmen.
Gruß Sonja
AW: Welcher CommandButton wurde gedrückt? Schleife?
16.07.2019 17:43:17
onur

Private Sub CommandButton1_Click()
Call test
End Sub
Private Sub CommandButton2_Click()
Call test
End Sub
Private Sub CommandButton13_Click()
Call test
End Sub
Public Sub test()
Dim CMB, nam
nam = ActiveControl.Name
CMB = Val(Mid(nam, 14))
Worksheets(2).Cells(CMB, 10) = CMB
End Sub

Anzeige
AW: Welcher CommandButton wurde gedrückt? Schleife?
17.07.2019 21:03:46
Sonja
Hey Onur,
vielen Dank. Super Idee mit dem "Abschneiden" des Namens des Buttons. Konnte ich gleich noch an anderer Stelle verwenden.
Gruß Sonja
AW: Welcher CommandButton wurde gedrückt? Schleife?
17.07.2019 22:23:04
Daniel
HI
ich würde hier statt der 16 Commandbuttons eine LISTBOX mit 16 einträgen verwenden.
dann reicht dir ein einziges Steuerelement und ein Makro:
Private Sub Listbox1_Click()
if Listbox1.Listindex >= 0 Then
CBM = Listbox1.ListIndex + 1
Worksheets(2).Cells(CMB, 10) = CMB
Listbox1.ListIndex = -1
End if
End Sub
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

CommandButtons in Excel: Effiziente Nutzung und Programmierung


Schritt-für-Schritt-Anleitung

Wenn Du eine UserForm mit mehreren CommandButtons in Excel VBA hast und herausfinden möchtest, welcher Button gedrückt wurde, kannst Du dies effizient mit einer Schleife und der Verwendung von Klassenmodulen umsetzen. Hier ist eine einfache Anleitung:

  1. Füge ein Klassenmodul hinzu:

    • Gehe zu „Einfügen“ > „Klassenmodul“ und benenne es clsButton.
  2. Code für das Klassenmodul:

    Option Explicit
    Public WithEvents myButton As MSForms.CommandButton
    
    Private Sub myButton_Click()
       MsgBox myButton.Caption
    End Sub
  3. Code für die UserForm:

    • Füge im UserForm das folgende VBA-Skript ein:
      
      Option Explicit
      Dim objButton(1 To 16) As New clsButton  '16 CommandButtons

    Private Sub UserForm_Initialize() Dim objControl As Control, i As Integer For Each objControl In Me.Controls If TypeName(objControl) = "CommandButton" Then i = i + 1 Set objButton(i).myButton = objControl With objButton(i).myButton .Caption = i End With End If Next End Sub

  4. Testen:

    • Starte die UserForm und klicke auf die CommandButtons. Eine MessageBox zeigt den Namen des Buttons an.

Häufige Fehler und Lösungen

  • Fehler: Die MessageBox wird nicht angezeigt.

    • Lösung: Stelle sicher, dass die WithEvents-Anweisung im Klassenmodul korrekt ist.
  • Fehler: Die Buttons reagieren nicht auf Klicks.

    • Lösung: Überprüfe, ob die Buttons tatsächlich als CommandButton deklariert sind und ob sie im UserForm enthalten sind.

Alternative Methoden

Eine alternative Methode zur Nutzung von CommandButtons ist die Verwendung einer ListBox. Dies reduziert die Anzahl der Steuerelemente und vereinfacht den Code.

  1. Code für die ListBox:

    Private Sub ListBox1_Click()
       If ListBox1.ListIndex >= 0 Then
           CMB = ListBox1.ListIndex + 1
           Worksheets(2).Cells(CMB, 10) = CMB
           ListBox1.ListIndex = -1
       End If
    End Sub
  2. Vorteil: Mit einer ListBox kannst Du die Auswahl direkt erfassen, ohne mehrere Buttons programmieren zu müssen.


Praktische Beispiele

Hier sind einige praktische Anwendungen für die oben genannten Methoden:

  • Benutzerdefinierte Aktionen: Du kannst jeden Button mit spezifischen Aktionen verknüpfen, indem Du den Code innerhalb der myButton_Click-Prozedur anpasst.

  • Datenverwaltung: Verwende die Buttons, um Daten aus der UserForm in ein Excel-Arbeitsblatt zu übertragen.


Tipps für Profis

  • Nutze Fehlerbehandlung in Deinem Code, um unerwartete Probleme beim Klick auf die Buttons zu vermeiden.
  • Überlege, ob Du Datenvalidierung einbauen möchtest, um sicherzustellen, dass nur gültige Eingaben verarbeitet werden.
  • Halte Deinen Code modular, indem Du wiederverwendbare Prozeduren schreibst, um die Wartbarkeit zu verbessern.

FAQ: Häufige Fragen

1. Wie kann ich den Text eines CommandButtons dynamisch ändern?
Du kannst die Caption-Eigenschaft des Buttons in der entsprechenden Click-Prozedur ändern, z.B.:

myButton.Caption = "Neuer Text"

2. Was mache ich, wenn ich mehr als 16 CommandButtons benötige?
Erweitere einfach das Array objButton im Klassenmodul und passe die Schleife entsprechend an.

3. Wie kann ich die Buttons in der UserForm anpassen?
Du kannst die Eigenschaften der Buttons im Eigenschaftenfenster von Excel anpassen, z.B. Hintergrundfarbe, Schriftart und Größe.

4. Gibt es eine Möglichkeit, die Buttons zu gruppieren?
Ja, Du kannst einen Frame oder ein GroupBox-Steuerelement verwenden, um die Buttons zu gruppieren und die Benutzeroberfläche zu organisieren.

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