【问题标题】:How to check if an Option Button is selected如何检查是否选择了选项按钮
【发布时间】:2015-06-18 10:59:44
【问题描述】:

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

我在 Excel 工作表中制作了几个表单控制按钮,并尝试了类似的操作:

if Activesheet.myButton = true then

     (do stuff)

endif

但我收到“对象不支持此属性或方法”错误。

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

【问题讨论】:

    标签: excel vba radio-button


    【解决方案1】:

    默认情况下,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
    

    【讨论】:

    • 感谢您的详细回复。我确实想出了如何最终使用 Activesheet.Optionbuttons("myButton") 来引用它,就像你在底部的方式一样。我不认为我可以像你一样设置按钮,因为我的工作表允许用户复制它,我认为这会产生命名冲突,因此我使用 Activesheet。你认为使用 AcitveX OptionButton 会更容易吗?
    • 如何引用工作表并不重要。如果您需要 ActiveSheet,请使用它。由于最近的 Excel 版本在使用 ActiveX 控件时会出现许多奇怪的问题,因此建议使用表单控件而不是 ActiveX 控件。例如,请参阅:blogs.technet.com/b/the_microsoft_excel_support_team_blog/…
    • 我使用了OptionButton ob.Value 方法,如果选中它,我得到 1.0 的值,如果未选中 OptionButton,我得到 -4169。任何想法 -4169 来自哪里。 1.0 作为 true 的值是否也正确?
    猜你喜欢
    • 2021-10-21
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    相关资源
    最近更新 更多