【问题标题】:VBA: Checkbox in Userform - Should be simple but not workingVBA:用户表单中的复选框 - 应该很简单但不起作用
【发布时间】:2013-07-26 08:48:45
【问题描述】:

我是 Visual Basics 的新手(到目前为止 2 天),我做过的唯一其他编程是 MATlab。

我试图让程序在 Excel 的不同列中打印不同的数字,具体取决于是否选中了用户表单中的复选框。总共有 26 个复选框 - 以及一些文本框 - 我正在尝试使用 For Each Control 循环来遍历所有复选框。

我查看了一些教程和一些论坛,但是当我尝试运行测试时,代码不起作用。更具体地说,没有错误出现,但“测试是否有效?”不在任何地方打印。

 Private Sub Add_Button_Click()

 Dim Ctrl As Control

 For Each Ctrl In DataInput.Controls
        If TypeName(Ctrl) = "Checkbox" Then
            If Ctrl.Value = True Then
                Sheets("Data").Range("A1") = "Testing if it Works?" 
            End If
        End If
 Next

 End Sub

我遵循与我遇到的所有其他论坛或教程相同的设置,但似乎没有发生任何事情。任何建议表示赞赏。

【问题讨论】:

  • 不管下面的答案我认为你代码的唯一问题是将一个if statement 更改为:If TypeName(Ctrl) = "CheckBox" ThenIf statement 区分大小写...
  • KazJaw 可能是对的,我实际上错过了这是在用户表单中完成的。我将控件放在用户表单之外,这使它与众不同。

标签: excel checkbox foreach userform vba


【解决方案1】:

编辑:此答案仅适用于将复选框直接放在 Excel 工作表上,而不是按要求放在用户表单中时。随意投反对票!

我玩过它,但它一点也不简单。无论您使用的是表单控件还是 ActiveX 控件,都有些不同。下面的代码对我有用,尽管我不完全确定它们是最好的方法。

使用 ActiveX 控件:

Private Sub Add_Button_Click()

For Each Ctrl In ActiveSheet.OLEObjects
   If TypeName(Ctrl.Object) = "CheckBox" Then
       If Ctrl.Object = True Then
           Sheets("Data").Range("A1") = "Testing if it Works?"
       End If
   End If
Next

End Sub

使用表单控件

Private Sub Add_Button_Click2()

For Each Item In Me.Shapes
   If Item.FormControlType = xlCheckBox Then
       If Item.DrawingObject = 1 Then
           Sheets("Data").Range("A1") = "Testing if it Works?"
       End If
   End If
Next

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    相关资源
    最近更新 更多