如何修复Excel VBA运行时错误‘91’:Q列校验触发弹窗报错问题
错误原因
- 运行时错误91为「对象变量或With块变量未设置」报错,触发原因是:当你修改的单元格不在
Q2:Q3977范围内时,Application.Intersect(Range("Q2:Q3977"), Target)会返回空对象Nothing,直接拿空对象和Open/Closed做字符串比较就会触发报错。 - 原有代码还存在隐藏问题:如果用户批量修改Q2:Q3977范围内的多个单元格,原有判断逻辑会失效。
修正后代码
Private Sub Worksheet_Change(ByVal Target As Range) Dim rngIntersect As Range Dim cell As Range ' 先获取修改区域和目标范围的交集 Set rngIntersect = Application.Intersect(Range("Q2:Q3977"), Target) ' 无交集直接退出,从根源避免91报错 If rngIntersect Is Nothing Then Exit Sub ' 遍历交集中的所有单元格,判断值是否合规 For Each cell In rngIntersect If cell.Value <> "Open" And cell.Value <> "Closed" Then MsgBox "Please Enter Justification" ' 可选:自动撤销不合规的输入,去掉下方注释即可生效 ' Application.Undo ' 选中不合规单元格,方便用户修改 cell.Select Exit For ' 只要有一个不合规就触发提示,无需继续遍历 End If Next End Sub
逻辑说明
- 优先判断修改区域是否和目标范围
Q2:Q3977有重叠,没有重叠直接终止程序运行,彻底消除91报错 - 新增多单元格遍历逻辑,不管是修改单个单元格还是批量粘贴多个单元格,都能正常触发校验
- 预留了自动撤销不合规输入的可选配置,可根据自身需求启用
内容的提问来源于stack exchange,提问作者M.Khalaf
相关产品推荐
相关产品推荐

