Ett*_*aiv 4 excel vba excel-vba radio-button form-control
我有一个使用ActiveX选项按钮可以正常工作的代码.但是,我希望宏也能在Mac上运行,所以我试图用表单控件替换我的ActiveX控件.使用ActiveX,我必须做的就是检查我的两个选项按钮之一是否被选中:
Sub OptionButton1_Click
If OptionButton1.Value = true then
(action...)
End if
End sub
Run Code Online (Sandbox Code Playgroud)
我一直在尝试在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
Run Code Online (Sandbox Code Playgroud)
我不确定BTUButton是否是正确的按钮名称,但我不在哪里检查,表单控件没有那么方便的"右键单击>属性",如ActiveX
如果您使用的是Form Control
,你可以得到相同的财产ActiveX
利用OLEFormat.Object
的特性Shape Object
.更好的是将它分配给声明为OptionButton的变量以获得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
Run Code Online (Sandbox Code Playgroud)
但话说回来,你真的不需要知道它的价值.
如果使用Form Control
,则将一个Macro
或一个子例程与选择它时执行的例程相关联.因此,您只需设置一个子例程来识别单击哪个按钮,然后为其执行相应的操作.
例如,您有2个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
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,只有一个子例程分配给两个选项按钮.
然后通过检查测试哪个调用子例程Application.Caller
.
这样,无需检查选项按钮值是true还是false.
您应该.Value
从所有选项按钮中删除,因为选项按钮不保存结果值,而选项组控件则保存。如果省略.Value
,则默认界面将报告选项按钮状态,正如您所期望的那样。您应该在 commandbutton_click 事件下编写所有相关代码,因为每当单击 commandbutton 时,选项按钮操作都会运行。
如果您想在单击选项按钮时运行操作代码,则不要为此编写 if 循环。
例子:
Sub CommandButton1_Click
If OptionButton1 = true then
(action code...)
End if
End sub
Sub OptionButton1_Click
(action code...)
End sub
Run Code Online (Sandbox Code Playgroud)