Kin*_*ong 3 excel vba radio-button
我希望能够检查代码是否选择了特定的选项按钮。
我在 Excel 工作表中制作了几个表单控件按钮,并尝试了类似的操作:
if Activesheet.myButton = true then
(do stuff)
endif
Run Code Online (Sandbox Code Playgroud)
但我收到“对象不支持此属性或方法”错误。
使用 ActiveX 选项按钮会更好吗?
默认情况下,VBA 隐藏了对使用放置在工作表上的表单控件所需的类型的轻松访问。
在 VBA 编辑器中,按“F2”功能键或从“视图”菜单->“对象浏览器”。这将打开对象浏览器窗口。如果在 Excel 库中搜索“OptionButton”,您将找不到对给定任务有用的任何内容。

但是,如果您在“库窗口”中右键单击并单击“显示隐藏的成员”,您将获得可以使用的完整类列表作为奖励。启用“隐藏成员”后,VBA 的智能感知也会向您显示这些类。

表单控件作为 Shape 添加到工作表中,但 Shape 对象本身没有任何属性可以让您查看是否选中了选项按钮。您可以通过 'OLEFormat.Object' 属性访问 OptionButton,但此时它只是一个 'Object' 类型。但是,您可以将 Object 转换为 Excel.OptionButton,如以下代码所示。您会注意到我在 'OptionButton' 前面加上了 'Excel' 命名空间(库)名称。通过这样做,只要您输入“.”,Intellisense 就会启动。并为您提供可供选择的课程列表。OptionButton 类公开了一个“值”属性,允许您检查它是被选中(值 = 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
Run Code Online (Sandbox Code Playgroud)
现在这一切正常,但是现在您可以访问隐藏成员,您还可以访问存在于 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
Run Code Online (Sandbox Code Playgroud)