Определите, какая командная кнопка была нажата, чтобы открыть пользовательскую форму

У меня есть две командные кнопки (cmd1 и cmd2) на userform1, при нажатии каждой из которых отображается одна и та же пользовательская форма (userform2). Можно ли в подразделе initialize или load определить, какая командная кнопка была нажата на userform1, и, следовательно, показать форму по-разному? Я предполагаю, что код в initialize или load на userform2 имеет следующий скелет:

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

Соответствующий "stuff" можно было бы переместить в обработчик событий для cmd1 и cmd2, однако, если можно использовать описанный выше метод, он будет намного проще и чище.


person Morettz    schedule 19.01.2015    source источник
comment
В качестве альтернативы, если вместо этого вы можете использовать событие Activate, у вас может быть переменная Commandbutton в userform2, которая устанавливается Userform1 до того, как она покажет userform2.   -  person Rory    schedule 19.01.2015


Ответы (2)


Используйте Public Variable в UserForm1, а затем протестируйте его в UserForm2_Initialize Event.
Что-то вроде этого в 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

И затем в 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
person L42    schedule 19.01.2015

вы можете сделать это и без публичной переменной.

я не буду показывать пример, где вы можете просто написать что-то в ячейке или скрытом листе, вместо этого я просто передам нужную информацию напрямую.

на этот раз whatsclicked — это имя метки в userform2,

в userform1 перед вызовом 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

Конечно, вам придется скрыть текст клика для пользователя (того же цвета, что и шрифт или фон...)

person Patrick Lepelletier    schedule 19.01.2015