Excel VBA布尔值功能求助:通过Function_EditableOn控制工作表选择变更事件
嘿,我看你现在的代码问题出在Function_EditableOn还没有实际的判断逻辑——它现在是空的,默认会返回False,所以永远不会触发MsgBox的执行。咱们来一步步把它完善好:
第一步:给函数添加判断逻辑
你需要让Function_EditableOn根据你的实际需求返回True或False。比如举个常见的场景:判断某个控制单元格的值、检查当前时间,或者验证用户权限。这里我用“检查Sheet1的A1单元格是否等于'允许编辑'”作为示例:
Function Function_EditableOn() As Boolean ' 替换成你自己的判断条件,比如检查用户、时间、特定单元格状态等 If ThisWorkbook.Sheets("Sheet1").Range("A1").Value = "允许编辑" Then Function_EditableOn = True Else Function_EditableOn = False End If End Function
第二步:修正事件过程的语法细节
你的Worksheet_SelectionChange里有几个小语法问题(虽然VBA对大小写不严格,但规范写法能避免潜在问题):
- 关键字
If和End If的首字母要大写 MsgBox作为过程调用时,不需要加括号(如果要加括号,得用Call前缀)- 可以简化判断条件,不用写
= True,直接写函数名即可
修正后的事件过程:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Function_EditableOn Then MsgBox "Work" ' 把这里换成你要执行的特定功能,比如修改单元格格式、调用其他子程序等 End If End Sub
额外提示
- 确保
Function_EditableOn和事件过程在同一个工作表模块里(如果放在标准模块里,默认是公共函数,工作表模块也能正常访问) - 你可以完全替换函数里的判断逻辑,比如改成
Function_EditableOn = Now() > #9:00:00 AM#(判断当前时间是否过了上午9点),或者检查当前登录用户名,完全根据你的需求来调整。
内容的提问来源于stack exchange,提问作者Roma_COm




