检测是否在VBA

时间:2015-06-05 03:35:31

标签: excel vba excel-vba form-control radio-button

我有一个使用ActiveX选项按钮可以正常工作的代码。但是,我希望宏也能在Mac上运行,所以我试图用表单控件替换我的ActiveX控件。使用ActiveX,我必须做的就是检查我的两个选项按钮之一是否被选中:

    Sub OptionButton1_Click
    If OptionButton1.Value = true then
        (action...)
    End if
    End sub

我一直试图在Google上找到与Form Controls相同的内容,但每次我都会找到:

  

对象必需错误

非常感谢你的答案@ L42和@Sai Nishank!现在如果我想检查OptionButton_Click,如果其他组中的选项按钮为真,该怎么办?我尝试了这种语法,但收到了一条错误消息:"编译错误方法或未找到数据"

    Sub USDButton_Click()
    MsgBox "USD"
    If Sheet1.BTUButton = True Then
    (action1)
    End If
     If Sheet1.kWhButton = True Then
    (action2)
     End If

我不确定BTUButton是否是按钮的正确名称,但我不知道在哪里检查,表单控件没有那么方便"右键单击>属性"像ActiveX

2 个答案:

答案 0 :(得分:8)

如果您使用Form Control,则可以使用ActiveX的{​​{1}}属性获取与OLEFormat.Object相同的属性。更好的是将它分配给声明为 OptionButton 的变量,以获得 Intellisense

Shape Object

但话说回来,你真的不需要知道价值 如果使用Dim opt As OptionButton With Sheets("Sheet1") ' Try to be always explicit Set opt = .Shapes("Option Button 1").OLEFormat.Object ' Form Control Debug.Pring opt.Value ' returns 1 (true) or -4146 (false) End With ,则将Form Control或子例程与选择它时执行的例程相关联。所以你只需要设置一个子例程来识别单击了哪个按钮,然后为它执行相应的操作。

例如,您有2个Macro选项按钮。

Form Control

在上面的代码中,您只有一个子例程分配给两个选项按钮 然后通过选中Sub CheckOptions() Select Case Application.Caller Case "Option Button 1" ' Action for option button 1 Case "Option Button 2" ' Action for option button 2 End Select End Sub 来测试哪个调用子例程 这样,无需检查选项按钮值是真还是假。

答案 1 :(得分:2)

您应该从所有选项按钮中删除.Value,因为选项按钮不包含结果值,选项组控件会保留。如果省略.Value,则默认界面将报告选项按钮状态,如您所料。您应该在commandbutton_click事件下编写所有相关代码,因为无论何时单击命令按钮,都会运行选项按钮操作。

如果要在单击选项按钮时运行操作代码,则不要为此编写if循环。

实施例

Sub CommandButton1_Click
    If OptionButton1 = true then
        (action code...)
    End if
End sub

Sub OptionButton1_Click   
    (action code...)
End sub