使用 VBA 使用 "vbModeless" 创建带有按钮的动态表单
Use VBA to create a dynamic form with a button using "vbModeless"
我想在 运行 时间内创建一个 vbModeless 动态用户表单。用户表单只有一个按钮,仅此而已。该表单使用 vbModal
可以正常工作,但不幸的是,使用 vbModeless
我无法获得按钮的点击事件。单击按钮不会调用该事件。我正在使用以下 steps/code:
创建了一个名为 UserForm1
的空用户表单
使用以下代码创建了一个名为 Modul1
的模块:
Sub CreateFormControls()
'Create Command Button
Dim Button01 As MSForms.CommandButton
Set Button01 = UserForm1.Controls.Add("Forms.CommandButton.1", "dynButton01", False)
Button01.Visible = True
'Reference click event
Dim ClickEvents As New Class1
Set ClickEvents.ButtonEvent = Button01
'Show User Form
UserForm1.Show vbModeless '-> THIS DOES NOT WORK, only vbmodal works
End Sub
使用以下代码创建了一个名为 Class1
的 class 模块:
Public WithEvents ButtonEvent As MSForms.CommandButton
Private Sub ButtonEvent_Click()
MsgBox "Test"
Unload UserForm1
End Sub
有没有办法使它与 vbModeless
一起使用,或者是否有其他解决方法?
注意:我还没有经常使用动态表单,我 copied/modified 使用 existing code snippet 显示的实现,但没有完全理解按钮对象如何引用点击事件,例如为什么需要一个单独的 class 而我不能在 Modul1 的过程中做到这一点。我假设其中包含打开非模态表单不起作用的原因。对这个问题有一点了解也将不胜感激。
ClickEvents
应在模块级别声明...
Option Explicit
Dim ClickEvents As New Class1 'declared at the module level
Sub CreateFormControls()
'etc
'
'
End Sub
我想在 运行 时间内创建一个 vbModeless 动态用户表单。用户表单只有一个按钮,仅此而已。该表单使用 vbModal
可以正常工作,但不幸的是,使用 vbModeless
我无法获得按钮的点击事件。单击按钮不会调用该事件。我正在使用以下 steps/code:
创建了一个名为
的空用户表单UserForm1
使用以下代码创建了一个名为
Modul1
的模块:Sub CreateFormControls() 'Create Command Button Dim Button01 As MSForms.CommandButton Set Button01 = UserForm1.Controls.Add("Forms.CommandButton.1", "dynButton01", False) Button01.Visible = True 'Reference click event Dim ClickEvents As New Class1 Set ClickEvents.ButtonEvent = Button01 'Show User Form UserForm1.Show vbModeless '-> THIS DOES NOT WORK, only vbmodal works End Sub
使用以下代码创建了一个名为
Class1
的 class 模块:Public WithEvents ButtonEvent As MSForms.CommandButton Private Sub ButtonEvent_Click() MsgBox "Test" Unload UserForm1 End Sub
有没有办法使它与 vbModeless
一起使用,或者是否有其他解决方法?
注意:我还没有经常使用动态表单,我 copied/modified 使用 existing code snippet 显示的实现,但没有完全理解按钮对象如何引用点击事件,例如为什么需要一个单独的 class 而我不能在 Modul1 的过程中做到这一点。我假设其中包含打开非模态表单不起作用的原因。对这个问题有一点了解也将不胜感激。
ClickEvents
应在模块级别声明...
Option Explicit
Dim ClickEvents As New Class1 'declared at the module level
Sub CreateFormControls()
'etc
'
'
End Sub