检测VBA中是否select了Form Control选项button

我有一个代码,使用ActiveX选项button很好。 不过,我希望macros在Mac上运行,所以我试图用表单控件replace我的ActiveX控件。 有了ActiveX,为了检查我的两个选项button之一是否被选中,我只需要做:

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

我一直在尝试在Google上find表单控件的等价物,但是每次我得到一个:

对象需要错误

非常感谢你的答案@ L42和@Sai Nishank! 现在如果我想检查一个OptionButton_Click如果从另一个组的选项button是真实的? 我试过这个语法,但我得到一个错误消息:“编译错误方法或数据未find”

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

我不知道如果BTUButton是button的正确名称,但我不在哪里检查,窗体控件没有那个方便的“右键单击”属性“像ActiveX

强壮的文字

您应该从选项button中删除.value,因为选项button是为了true或false。 所以没有必要提及价值,试试这个,现在就行。 你可以在commanbutton_click下写下所有的东西。 因为当点击commandbutton时,选项button动作将会运行

如果你想要点击optionbutton时运行的动作,那么不要写循环。

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

如果使用的是Form Control ,则可以使用Shape Object OLEFormat.Object属性获取与ActiveX相同的属性。 更好的是将其分配给一个声明为OptionButton的variables来获取Intellisense踢入。

 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 ,则将Macro或子例程与选定时执行的它关联。 所以你只需要设置一个子程序来识别哪个button被点击,然后执行相应的操作。

例如,你有2个Form Control选项button。

 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 

在上面的代码中,只有一个子程序分配给两个选项button。
然后通过检查Application.Callertesting哪个调用子例程。
这样,不需要检查选项button的值是真还是假。