确定哪个命令按钮被点击以打开用户窗体。

3

我在userform1上有两个命令按钮(cmd1cmd2),每个按钮点击后都会显示相同的用户窗体(userform2)。在initializeload子程序中,是否可以确定是哪个命令按钮在userform1上被点击,从而以不同的方式显示表单?我想象userform2上的initializeload子程序中的代码应该具有以下框架:

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

如果可以使用上述方法,那么相应的"stuff"可以移入cmd1cmd2的事件处理程序中。然而,这个方法可以使得代码更加简单和清晰。


或者,如果您可以使用“Activate”事件,您可以在Userform1显示userform2之前设置一个Commandbutton变量,该变量在userform2中。 - Rory
3个回答

2

UserForm1中使用一个公共变量,然后在UserForm2_Initialize事件中进行测试。
在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

0

你也可以不使用公共变量来实现。

我不会展示一个例子,让你在单元格或隐藏工作表中简单地写入一些内容,而是直接传递所需的信息。

这次,whatsclicked 是 userform2 中标签的名称,

在调用 userform2 之前,在 userform1 中:

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

当然,您必须将whatsclicked的文本隐藏对用户不可见(与字体或背景颜色相同...)


0

您可以使用ActiveControl来实现此功能,因为当您单击控件时,它会变为活动/聚焦状态:

Private Sub CommandButton1_Click()
    Debug.Print Me.ActiveControl.Name
End Sub

Private Sub CommandButton2_Click()
    Debug.Print Me.ActiveControl.Name
End Sub

所以更符合你的例子:

Private Sub CommandButton1_Click()
    Call DoStuff
End Sub

Private Sub CommandButton2_Click()
    Call DoStuff
End Sub

Private Sub DoStuff()
  select case Me.ActiveControl.Name
    case "CommandButton1"
      ' do stuff relating to 1
    case "CommandButton2"
      ' do stuff relating to 2
    case else
      'error etc.
  end select
End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接