如何检查是否选择了选项按钮

时间:2015-06-17 23:31:58

标签: excel vba radio-button

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

我在Excel工作表中制作了几个Form Control按钮,我尝试了类似的东西:

if Activesheet.myButton = true then

     (do stuff)

endif

但是我得到了一个"对象不支持这个属性或方法"错误。

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

1 个答案:

答案 0 :(得分:4)

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

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

Object Browser - Normal

但是,如果您右键单击“库窗口”'并点击“显示隐藏的成员”,您将获得一个完整的类列表,您可以使用它们。启用“隐藏会员”后,VBA的智能感知还会向您展示这些课程。

Object Browser with hidden Members Shown

表单控件作为Shape添加到工作表中,但Shape对象本身没有任何属性可以让您查看是否选中了Option Button。您可以通过< OLEFormat.Object'访问OptionButton。财产,但在这一点上它只是一个对象'类型。 但是,您可以将Object强制转换为Excel.OptionButton,如以下代码所示。你会注意到我的前言' OptionButton'用Excel' 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

现在这一切都有效,但是现在您已经访问了Hidden Members,您还可以访问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