根据Option Button选择修改Excel单元格及VBA运行400错误排查咨询
问题排查与修复方案
核心错误原因
- 逻辑结构错误:原代码没有添加判断分支,是直接强制修改Option Button的Value属性后就执行对应操作,等于两个分支的代码会被顺次全部执行,不仅逻辑完全混乱,还会因为反复修改单选框状态触发冲突报错
- 关键字
Me使用错误:如果你的代码是放在普通模块而非对应工作表的代码模块中,Me无法指向当前工作表,会直接触发运行时错误 - 空值赋值错误:VBA中给Excel单元格赋值为空不能用
Null,应该用Empty或者vbNullString - 缺少工作表保护判断:单元格的
Locked属性只有在工作表处于保护状态时才会生效,修改Locked属性前必须先解除工作表保护,修改完成后可按需重新开启保护
修正后代码
不需要写两个独立的宏,把两个单选框的指定宏都统一改成下面这个Sub即可:
Sub Check_Method_Switch() ' 声明工作表对象,避免Me关键字错误 Dim ws As Worksheet ' 也可以直接替换为Set ws = ThisWorkbook.Worksheets("你的工作表名") 稳定性更高 Set ws = ActiveSheet ' 临时解除工作表保护,如果你设置了密码就加Password参数:ws.Unprotect Password:="你的密码" ws.Unprotect ' 判断Option Button 1是否选中(单选框天然互斥,不需要额外判断Option Button 2状态) If ws.OptionButtons("Option Button 1").Value = 1 Then With ws.Range("F18") .Locked = False .Interior.Color = 2747637 End With With ws.Range("F19:F21") .Locked = True .Value = Empty .Interior.Color = 16 End With Else With ws.Range("F19:F21") .Locked = False .Interior.Color = 2747637 End With With ws.Range("F18") .Locked = True .Value = Empty .Interior.Color = 16 End With End If ' 按需重新开启工作表保护,有密码同理加Password参数 ws.Protect End Sub
额外注意事项
- 请确认你的表单控件单选框的名称确实是
Option Button 1和Option Button 2,可以在开发工具-选择窗格里查看控件名称 - 上述代码仅适用于表单控件类型的Option Button,如果你用的是ActiveX控件的单选框,写法需要对应调整
内容的提问来源于stack exchange,提问作者Nene
相关产品推荐
相关产品推荐

