如何在Excel 2007中使用VBA访问复选框

8

当添加复选框时,如何从VBA访问该值?

  • 在Excel 2007中,在"开发人员"选项卡上
  • 插入、表单控件、复选框
  • 将复选框重命名为chkMyCheck
  • 向复选框添加宏,现在有了Module1和chkMyCheck_Clicked

以下所有操作均失败

Sheets("Sheet1").chkMyCheck.Checked  
Sheets("Sheet1").chkMyCheck.Value  
Sheets("Sheet1").Shapes("chkMyCheck").Checked  
Sheets("Sheet1").Shapes("chkMyCheck").Value  
Sheet1.chkMyCheck.Checked  
Sheet1.chkMyCheck.Value  

Sheet1.Shapes("chkMyCheck")似乎找到了对象,但没有公开任何看起来能返回选中状态的属性。

3个回答

9
搞定了
If Sheet1.Shapes("chkMyCheck").ControlFormat.Value = xlOn Then
.....

4

一种方法:

Dim oCheck As Object
Set oCheck = Sheet1.CheckBoxes("chkMyCheck")
MsgBox (oCheck.Value = xlOn)

编辑:这里有另一种方法 - 也许这个方法适合你......
Sub Tester2()
    Dim sh As Shape
    For Each sh In Sheet1.Shapes
        If sh.Type = msoFormControl Then
            If sh.FormControlType = xlCheckBox Then
                 Debug.Print sh.Name & "=" & sh.ControlFormat.Value
            End If
        End If
    Next sh
End Sub

同样不起作用。在Excel 2007中,工作表上没有CheckBoxes属性(至少我的副本没有)。 - Russell Steen
1
我测试过了,对于我来说没问题:表单控件复选框,在Windows XP和7上使用Excel 2007。虽然对象浏览器中没有“CheckBoxes”集合,但这并不影响它的工作。 - Tim Williams
3
如果你在“对象浏览器”中右键单击并选择“显示隐藏成员”,你会看到复选框(Checkbox)和复选框集合(Checkboxes)。它们已经被弃用了,但仍然存在于那里。 - Dick Kusleika

2

为了完整性,如果您使用的是ActiveX复选框而不是普通复选框,则语法为

If Sheet1.Shapes("chkMyCheck").OLEFormat.Object.Object.Value Then 
...

使用“本地窗口”和设置为形状的变量进行查找 -
Dim shp as Shape
Set shp = Sheet1.Shapes("chkMyCheck")
Stop

同样,Sheet1.Shapes("chkMyCheck").OLEFormat.Object.Object.Value = True 可以启用一个ActiveX选项按钮。 - FlexMcMurphy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接