Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen

Welcher CommandButton wurde gedrückt? Schleife?


Betrifft: Welcher CommandButton wurde gedrückt? Schleife? von: Sonja
Geschrieben am: 16.07.2019 16:00:41

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

  

Betrifft: Klassenprogrammierung von: Rudi Maintaire
Geschrieben am: 16.07.2019 16:26:17

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


  

Betrifft: AW: Klassenprogrammierung von: Sonja
Geschrieben am: 17.07.2019 21:06:20

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


  

Betrifft: AW: Welcher CommandButton wurde gedrückt? Schleife? von: onur
Geschrieben am: 16.07.2019 17:43:17

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



  

Betrifft: AW: Welcher CommandButton wurde gedrückt? Schleife? von: Sonja
Geschrieben am: 17.07.2019 21:03:46

Hey Onur,

vielen Dank. Super Idee mit dem "Abschneiden" des Namens des Buttons. Konnte ich gleich noch an anderer Stelle verwenden.

Gruß Sonja


  

Betrifft: AW: Welcher CommandButton wurde gedrückt? Schleife? von: Daniel
Geschrieben am: 17.07.2019 22:23:04

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


Beiträge aus dem Excel-Forum zum Thema "Welcher CommandButton wurde gedrückt? Schleife?"