如何检查是否select了一个选项button

我希望能够检查代码是否select了特定的选项button。

我在Excel工作表中做了几个表单控制button,我尝试了这样的:

if Activesheet.myButton = true then (do stuff) endif 

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

使用ActiveX选项button会更好吗?

默认情况下,VBA隐藏了轻松访问使用工作表上的表单控件所需的types。

在VBA编辑器中,按下“F2”function键或从“查看菜单” – >“对​​象浏览器”。 这将打开对象浏览器窗口。 如果在Excel库中search“OptionButton”,则不会为给定任务find任何用途。

对象浏览器 - 正常

但是,如果您在“库窗口”中右键单击并单击“显示隐藏成员”,您将获得可以使用的完整类别列表。 一旦启用“隐藏成员”,VBA的智能感知系统也会向您展示这些课程。

显示隐藏成员的对象浏览器

窗体控件作为一个形状添加到工作表,但形状对象本身没有任何属性,让您看到选项button是否被选中。 你可以通过'OLEFormat.Object'属性访问OptionButton,但是在这一点上它只是一个'Object'types。 但是,您可以将对象转换为Excel.OptionButton,如下面的代码所示。 你会注意到我用“Excel”命名空间(库)名称的前缀“OptionButton”。 通过这样做,只要input'。',Intellisense就会立即启动。 并为您提供可供select的课程列表。 OptionButton类公开了一个'Value'属性,允许你检查是否被选中(Value = 1)或者未被选中(Value = 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