我希望能够在代码中检查是否选择了特定的“选项按钮”。

我在Excel工作表中做了几个“表单控制”按钮,并尝试了类似的方法:

if Activesheet.myButton = true then

     (do stuff)

endif


但出现“对象不支持此属性或方法”错误。

使用ActiveX选项按钮会更好吗?

最佳答案

默认情况下,VBA隐藏对使用工作表上的窗体控件所需的类型的轻松访问。

在VBA编辑器中,按“ F2”功能键或从“查看菜单”->“对象浏览器”中。这将打开“对象浏览器”窗口。如果在Excel库中搜索“ OptionButton”,则将找不到用于给定任务的任何内容。



但是,如果在“库窗口”中单击鼠标右键,然后单击“显示隐藏的成员”,则将获得可使用的课程的完整列表。启用“隐藏成员”后,VBA的Intellisense还将向您显示这些类。



表单控件作为形状添加到工作表中,但是Shape对象本身没有任何允许您查看是否选中“选项按钮”的属性。您可以通过'OLEFormat.Object'属性访问OptionButton,但此时它只是一个'Object'类型。
但是,可以将对象强制转换为Excel.OptionButton,如以下代码所示。您会注意到,我在'OptionButton'的前面加上了'Excel'名称空间(库)名称。这样,只要您输入“。”,Intellisense就会启动。并为您提供可供选择的课程列表。 OptionButton类公开一个'Value'属性,该属性使您可以检查它是否已选中(值= 1)或未选中(值= 0)。

Dim ws As Excel.Worksheet
Set ws = ActiveWorkbook.Worksheets.Item("Sheet2")

Dim btn As Shape
Set btn = ws.Shapes.Item("Option Button 1")
Dim optBtn1 As Excel.OptionButton
Set optBtn1 = Sheet2.Shapes.Item("Option Button 1").OLEFormat.Object

If optBtn1.Value = 1 Then ' it is checked
   Debug.Print "Option Button 1 is checked"
End If


现在,所有步骤都可以使用了,但是您已经拥有隐藏成员的权限,您还可以访问WorkSheet对象上存在的OptionButtons集合,并且可以跳过作为Shape对象的访问。

Dim ws As Excel.Worksheet
Set ws = ActiveWorkbook.Worksheets.Item("Sheet2")

Dim optBtn2 As Excel.OptionButton
Set optBtn2 = ws.OptionButtons.Item("Option Button 2")
If optBtn2.Value = 1 Then ' it is checked
   Debug.Print "Option Button 2 is checked"
End If

09-16 00:09