【问题标题】:How to Create a Simple Userform with Checkboxes in VBA如何在 VBA 中创建带有复选框的简单用户表单
【发布时间】:2017-11-30 13:40:05
【问题描述】:

我对 VBA 非常陌生,我正在尝试创建一个电子表格,该电子表格使用复选框用户表单来填充电子表格中的表格。我已经能够填充表格,但如果一个框被意外选中并且未选中,则表格仍然被填充。如何在未选中一个框后让表格恢复为空白,以及对 33 个复选框进行编码以填充电子表格中的 33 个空格的有效方法是什么。请参阅附加的图像以帮助我进行描述。

谢谢,

用户表单图片

电子表格图片

【问题讨论】:

  • 如果您当前的代码有问题,那么它应该在您的问题中。
  • 将每个checkbox 命名为1a1b1c 然后2a2b2c。只需编写代码即可将所有复选框名称的名称添加到您的工作表中。

标签: vba excel checkbox userform


【解决方案1】:

将 CheckBox ControlSource 属性设置为范围地址会将其链接到范围。如果范围不合格A1,当用户窗体打开时,复选框将链接到作为 ActiveSheet 的工作表。要限定地址,请在单引号中添加范围的父工作表名称,后跟感叹号,最后是范围相对地址'Check List'!A1

最初,复选框将显示为灰色,表示链接的单元格为空。当您选中和取消选中它时,linkedcell 的值将在 True 和 False 之间切换。

演示用户表单代码

Private Sub UserForm_Initialize()
    Dim Left As Single, Top As Single
    Dim cell As Range, row As Range, check As MSForms.CheckBox
    Top = 25
    Left = 25
    With Worksheets("Check List")
        For Each row In .Range("A2:K4").Rows
            For Each cell In row.Cells
                Set check = Me.Controls.Add("Forms.CheckBox.1")
                With check
                    .ControlSource = "'" & cell.Parent.Name & "'!" & cell.Address(RowAbsolute:=False, ColumnAbsolute:=False)
                    .Left = Left
                    .Top = Top
                    Left = Left + 12
                End With
            Next
            Left = 25
            Top = Top + check.Height + 2
        Next
    End With
End Sub

【讨论】:

  • 嘿,你是如何录制动画 gif 截图甚至包括鼠标光标的? (我太累了,我以为我在看东西!)
  • 感谢您,我已经完成了大部分工作。但是,我很难让演示用户表单代码实际工作。我最终不得不手动引用所有的 ControlSources。当我尝试运行代码时,它给了我一个编译错误:未为检查定义用户定义的类型作为 MSForms.CheckBox ... 知道如何解决这个问题,还是我必须为每个复选框手动输入 ControlSource?再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
相关资源
最近更新 更多