You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

删除目标列数据时触发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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:45:43