【发布时间】:2015-06-18 10:59:44
【问题描述】:
我希望能够检查代码是否选择了特定的选项按钮。
我在 Excel 工作表中制作了几个表单控制按钮,并尝试了类似的操作:
if Activesheet.myButton = true then
(do stuff)
endif
但我收到“对象不支持此属性或方法”错误。
使用 ActiveX 选项按钮会更好吗?
【问题讨论】:
标签: excel vba radio-button
我希望能够检查代码是否选择了特定的选项按钮。
我在 Excel 工作表中制作了几个表单控制按钮,并尝试了类似的操作:
if Activesheet.myButton = true then
(do stuff)
endif
但我收到“对象不支持此属性或方法”错误。
使用 ActiveX 选项按钮会更好吗?
【问题讨论】:
标签: excel vba radio-button
默认情况下,VBA 隐藏对使用放置在工作表上的表单控件所需的类型的轻松访问。
在 VBA 编辑器中,按“F2”功能键或从视图菜单->对象浏览器。这将打开对象浏览器窗口。如果在 Excel 库中搜索“OptionButton”,您将找不到任何对给定任务有用的东西。
但是,如果您右键单击“库窗口”并单击“显示隐藏的成员”,您将获得可以使用的完整职业列表。启用“隐藏成员”后,VBA 的 Intellisense 也会向您显示这些类。
表单控件作为形状添加到工作表中,但形状对象本身没有任何属性可以让您查看是否选中了选项按钮。您可以通过“OLEFormat.Object”属性访问 OptionButton,但此时它只是一个“对象”类型。 但是,您可以将 Object 转换为 Excel.OptionButton,如以下代码所示。您会注意到我在“OptionButton”前面加上“Excel”命名空间(库)名称。通过这样做,Intellisense 将在您键入“。”后立即启动。并为您提供可供选择的课程列表。 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
现在一切正常,但是现在您可以访问 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
【讨论】:
OptionButton ob.Value 方法,如果选中它,我得到 1.0 的值,如果未选中 OptionButton,我得到 -4169。任何想法 -4169 来自哪里。 1.0 作为 true 的值是否也正确?