VBA:Userform中的复选框 - 应该简单但不起作用

时间:2013-07-26 07:23:14

标签: excel-vba checkbox foreach userform vba

我是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

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

1 个答案:

答案 0 :(得分:0)

编辑:此答案仅适用于将复选框直接放在Excel工作表上,而不是按照要求的用户形式。随意downvote!

我玩弄它并没有完全简单。无论您使用的是Form控件还是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