繁体   English   中英

动态定义的复选框的 Excel VBA 事件未触发

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM