I have two command buttons (
userform1, when clicked each show the same userform (
userform2). Within the
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
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
cmd2 however, if the method described above can be used it will be a lot simpler and cleaner.
Public Variable in
UserForm1 and then test it in
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
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…)