使用Worksheet_Change监听C8单元格变化清空内容,删除操作失效的解决方法
修复方案
你的代码在按Delete删除C8内容时不执行,核心问题有两个:
- 原代码仅判断Target地址完全等于C8,若操作时误选多单元格(哪怕包含C8),代码不会触发;
- 清空单元格的操作会再次触发
Worksheet_Change事件,可能导致递归干扰。
修改后的完整代码如下:
Private Sub Worksheet_Change(ByVal Target As Range) ' 检查操作范围是否包含C8单元格 If Not Intersect(Target, Range("C8")) Is Nothing Then Dim Resp As Integer Resp = MsgBox("你正在修改工单号,此操作将清空你的回复及同行评审的回复。" & vbCrLf & vbCrLf & _ "确定要继续并清空所有相关单元格吗?", 36, "请确认!!!") If Resp <> 6 Then ' 点击了取消 MsgBox "没问题," & vbCrLf & _ "点击OK即可,不会有任何影响。", 48, "操作已取消。" Else ' 禁用事件,避免清空单元格时递归触发Change事件 Application.EnableEvents = False ' 清空指定单元格区域(合并重复操作,简化代码) Range("C22:C85").ClearContents Range("C9:F18").ClearContents ' 恢复事件触发 Application.EnableEvents = True MsgBox "工单号已修改!相关回复已清空。" End If End If End Sub
关键修改点:
- 用
Intersect(Target, Range("C8"))替代地址完全匹配,确保只要C8被修改(包括删除、多单元格操作中涉及C8)就触发代码; - 添加
Application.EnableEvents = False/True,避免清空单元格时重复触发Worksheet_Change事件,防止逻辑混乱或报错; - 合并了重复的清空操作,将逐行清空的
C9:F18区域合并为一个范围,优化代码简洁性。
内容的提问来源于stack exchange,提问作者nitemare13
相关产品推荐
相关产品推荐

