删除目标列数据时触发VBA Type mismatch (Error 13)错误,求解决
解决Worksheet_Change事件的类型不匹配错误
你遇到的类型不匹配错误(Error 13)主要由两个场景触发:
- 同时删除第16列和邻列内容时,
Target是多单元格区域,Target.Value返回数组,直接和字符串"Complete"比较会触发类型不匹配。 - 单独删除第16列内容时,
Target.Value为空值,和字符串对比也可能引发错误。
给你修正后的代码,能彻底避免该问题,同时优化功能:
Private Sub Worksheet_Change(ByVal Target As Range) ' 禁用事件,防止写入日期时重复触发Change事件 Application.EnableEvents = False ' 错误捕获,确保事件能重新启用 On Error GoTo ErrorHandler ' 只处理单个单元格且位于第16列的情况 If Target.Cells.Count = 1 And Target.Column = 16 Then ' 先判断单元格值为字符串类型,再对比内容 If TypeName(Target.Value) = "String" And Target.Value = "Complete" Then Target.Offset(0, 1) = Format(Now(), "yyyy-mm-dd hh:mm:ss") ' 可按需调整日期格式 Else ' 若不是"Complete",自动清空邻列日期 Target.Offset(0, 1).ClearContents End If End If ErrorHandler: ' 无论是否出错,都恢复事件启用状态 Application.EnableEvents = True ' 清除错误状态 If Err.Number <> 0 Then Err.Clear End Sub
关键修改说明:
Application.EnableEvents:写入邻列日期时会再次触发Change事件,禁用后能避免循环;同时确保即使出错,事件也能恢复,不会导致后续功能失效。Target.Cells.Count = 1:只处理单个单元格的操作,规避多单元格修改/删除时的类型不匹配。TypeName(Target.Value) = "String":先校验值的类型,只有是字符串时才和"Complete"对比,避免空值或其他类型引发的错误。- 错误捕获机制:即使出现意外错误,也能保证代码执行到恢复事件的步骤,不会影响工作表的后续操作。
内容的提问来源于stack exchange,提问作者HaydenHoskins
相关产品推荐
相关产品推荐

