【问题标题】:Checkbox event doesn't work in VBA复选框事件在 VBA 中不起作用
【发布时间】:2016-11-23 10:40:48
【问题描述】:

我动态定义了复选框,在运行时添加到用户表单中。

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”返回。

【问题讨论】:

  • 您需要创建一个类来处理事件 - 检查这些链接:stackoverflow.com/questions/3014421/…(使用类事件,不要添加额外代码!)。
  • @DarrenBartrup-Cook 感谢您的帖子。我投票赞成 :) 我将很快分享我的解决方案代码。

标签: vba excel checkbox


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 2014-03-16
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多