Home » excel » vba – Determine which command button was clicked to open userform

vba – Determine which command button was clicked to open userform

Posted by: admin April 23, 2020 Leave a comment

Questions:

I have two command buttons (cmd1 and cmd2) on userform1, when clicked each show the same userform (userform2). Within the initialize or load sub is it possible to determine which command button was clicked on userform1 and therefore show the form differently? I imagine the code in either the initialize or load sub on userform2 to have the following skeleton:

if (cmd1 was clicked)
' do stuff relating to 1
elseif (cmd2 was clicked)
' do stuff relating to 2
else
' error handling
End if

The respective “stuff” could be moved into the event handler for cmd1 and cmd2 however, if the method described above can be used it will be a lot simpler and cleaner.

How to&Answers:

Use a Public Variable in UserForm1 and then test it in UserForm2_Initialize Event.
Something like this in UserForm1:

Public whatsclicked As String
Private Sub CommandButton1_Click()
    whatsclicked = "CommandButton1"
    UserForm2.Show
End Sub

Private Sub CommandButton2_Click()
    whatsclicked = "CommandButton2"
    UserForm2.Show
End Sub

And then in UserForm2:

Private Sub UserForm_Initialize()
    Select Case UserForm1.whatsclicked
    Case "CommandButton1": MsgBox "CommandButton1 loaded form."
    Case "CommandButton2": MsgBox "CommandButton2 loaded form."
    Case Else 'Do something else
    End Select
End Sub

Answer:

you can do it also without public variable.

i won’t show an example where you can simply write something in a cell or hidden sheet, instead i just pass the wanted info directly .

this time whatsclicked is the name of a label in userform2,

in userform1, before calling userform2:

Private Sub CommandButton1_Click()
load UserForm2
with UserForm2
    .whatsclicked.caption= "CommandButton1"
    .Show
end with
End Sub

Private Sub CommandButton2_Click()
load UserForm2
with UserForm2
    .whatsclicked.caption= "CommandButton2"
    .Show
end with
End Sub

Of course, you will have to hide the text of whatsclicked to the user (same color as font or background…)