Checkbox事件在VBA中不起作用

时间:2016-07-20 09:14:42

标签: vba excel-vba checkbox excel

我动态定义了复选框,这些复选框在运行时添加到用户窗体中。

Sub Userform_Initialize()
  For i = 1 To 4
    Set Chk = Frame4.Controls.Add("Forms.Checkbox.1", "Checkbox" & i)
    With Chk
       .top = 84 + k
       .left = 336
       .Width = 100
       .Height = 18
       .Caption = "Add item"
       .Visible = True
    End With
    k = k + 24
  Next i
End Sub

Public WithEvents Chk As MSForms.CheckBox
Private Sub Chk_Click()
    MsgBox Chk
End Sub

由于某种原因,该事件没有回应。有没有人知道为什么?我需要复选框的布尔值。这意味着当用户点击动态复选框时,我会在msgbox中看到“True”。

1 个答案:

答案 0 :(得分:1)

将类模块添加到项目中,根据需要命名(比如说" ChkBox"),并将此代码放入其中:

Public WithEvents Chk As MSForms.CheckBox

Private Sub Chk_Click()
    MsgBox Chk.Value
End Sub

在您的用户格式代码中,添加此

Dim myChks(1 To 4) As New ChkBox '<--| this must be at the very top of your userform code pane

Sub Userform_Initialize()
    Dim i As Long, k As Long

    With Me.Frame4.Controls
        For i = 1 To 4
            With .Add("Forms.Checkbox.1", "Checkbox" & i)
                .Top = 84 + k
                .Left = 336
                .Width = 100
                .Height = 18
                .Caption = "Add item"
                .Visible = True
                Set myChks(i).Chk = .Parent.Item(.Name)
            End With
            k = k + 24
        Next i
    End With
End Sub