我有一个使用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
答案 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