Worksheet_Change事件VBA代码仅单工作表生效问题排查求助
问题排查与修复方案
核心问题
- 无效判断导致代码提前终止:你定义了
rng变量但从未赋值,运行到If rng Is Nothing Then Exit Sub时,该条件永远成立,直接退出过程,后面控制行显隐的代码根本没机会执行。 - 未显式声明变量:
rng1和rng2属于隐式声明,容易引发不可预期的错误,不符合VBA编码规范。
修复后的代码
Private Sub Worksheet_Change(ByVal Target As Range) ' 显式声明所有变量 Dim rng1 As Range Dim rng2 As Range If Target.CountLarge > 1 Then Exit Sub Select Case Target.Address(0, 0) Case "E73" Set rng1 = Sheets("Proposal").Rows("349:403") Set rng2 = Sheets("Binder").Rows("350:404") Case "E128" Set rng1 = Sheets("Proposal").Rows("404:462") Set rng2 = Sheets("Binder").Rows("405:463") ' 目标单元格非E73/E128时直接退出 Case Else Exit Sub End Select ' 关闭屏幕刷新避免闪屏,提升性能 Application.ScreenUpdating = False Select Case Target.Value Case "Included" rng1.Hidden = False rng2.Hidden = False Case "Excluded" rng1.Hidden = True rng2.Hidden = True End Select ' 恢复屏幕刷新 Application.ScreenUpdating = True End Sub
修改说明
- 删除了无用的
rng变量及对应判断,改用Case Else逻辑直接退出,代码更简洁清晰。 - 显式声明
rng1和rng2,避免因变量名拼写错误导致的异常。 - 增加屏幕刷新开关,切换工作表时不会出现闪屏,提升运行流畅度。
内容的提问来源于stack exchange,提问作者Kkoruni
相关产品推荐
相关产品推荐

