我希望能够检查代码是否选择了特定的选项按钮。
我在Excel工作表中制作了几个Form Control按钮,我尝试了类似的东西:
if Activesheet.myButton = true then
(do stuff)
endif
但是我得到了一个"对象不支持这个属性或方法"错误。
使用ActiveX选项按钮会更好吗?
答案 0 :(得分:4)
默认情况下,VBA隐藏了对使用放置在工作表上的表单控件所需的类型的轻松访问。
在VBA编辑器中,按“' F2'功能键或从查看菜单 - >对象浏览器。这将打开“对象浏览器”窗口。如果在Excel库中搜索' OptionButton',您将找不到任何用于给定任务的内容。
但是,如果您右键单击“库窗口”'并点击“显示隐藏的成员”,您将获得一个完整的类列表,您可以使用它们。启用“隐藏会员”后,VBA的智能感知还会向您展示这些课程。
表单控件作为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