[英]Excel VBA Events of dynamically defined CheckBoxes not triggering
这是我在这个论坛上的第一篇文章。 到目前为止,我已经通过浏览可用答案设法解决了所有困难。 这次不行了
我使用这个示例创建了一个自填充用户窗体 (Userform1),其中包含一些复选框,其中包含以示例中描述的方式定义的事件,方法是使用要运行的代码创建类模块并将类子分配给复选框。
然后将 UserForm1 复制到几个案例场景中,当这些用户表单通过其名称(例如:UserForm1.show)显式调用时,一切正常,但现在我在“for”循环中调用多个用户表单,该循环通过另一组复选框我的工作表来决定要初始化哪些用户表单。 每个用户表单通过一个基于其名称的函数存储在一个对象变量(UForm)中,然后对其进行初始化,现在用户表单的复选框的事件不触发!!
Sub Test()
Dim chk As Object
Dim Uform As Object
Dim strForm as String
Dim MMarray(0 To 3, 1) As String '3 so far, more to be added
MMarray(0, 0) = "Chk1": MMarray(0, 1) = "UserForm1"
MMarray(1, 0) = "Chk2": MMarray(1, 1) = "UserForm2"
MMarray(2, 0) = "Chk3": MMarray(2, 1) = "UserForm3"
MMarray(3, 0) = "Chk4": MMarray(3, 1) = "UserForm4"
' #############################
' initializing global variables defined elsewhere
iMM = 0 '
ReDim data_ini(0, 0)
ReDim data_MM_tot(0, 1)
For i = 0 To UBound(MMarray)
Set chk = ActiveSheet.Shapes(MMarray(i, 0))
If chk.OLEFormat.Object.value = 1 Then
strForm = MMarray(i, 1)
Set Uform = GetFormObjectbyName(strForm)
Uform.Show
Call Uform.repor 'this is another sub in the userform code
End If
Next i
End Sub
我认为这个问题与这样一个事实有关,即在显示表单时有一个正在进行的过程,这就是无法触发事件的原因。 有没有办法在这些情况下触发事件?
非常感谢你的帮助。
以您的示例为基础,您可以拥有一个类,就像这样
Private WithEvents cbCustom As MSForms.CheckBox
Private strFormName As String
Public Sub Init(cbInput As MSForms.CheckBox)
Dim ctl As Control
Set cbCustom = cbInput
Set ctl = cbInput
strFormName = ctl.Parent.Name
End Sub
Private Sub cbCustom_Click()
Select Case strFormName
Case "Userform1"
Select Case cbCustom.Name
Case "Checkbox1"
Case Else
End Select
Case "Userform2"
End Select
End Sub
我在我的用户表单中使用了以下内容
Private c As New clsCustomCheckBox
Private Sub UserForm_Initialize()
c.Init Me.CheckBox1
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.