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

S列输入Done自动填日期用户名,插入/删行后Worksheet_Change报错误13

解决Worksheet_Change宏插入/删除行触发错误13的问题

错误13(类型不匹配)的根源是:插入或删除行时,Target会指向多个单元格(比如整行),此时Target.Value返回的是数组,无法直接和字符串"Done"做比较。以下是修正后的代码:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim cell As Range
    Dim intersectRange As Range
    
    ' 禁用事件防止循环触发
    Application.EnableEvents = False
    
    On Error GoTo Cleanup ' 出错时强制恢复事件设置
    
    ' 仅锁定S列的受影响单元格
    Set intersectRange = Intersect(Target, Me.Range("S:S"))
    If Not intersectRange Is Nothing Then
        ' 逐个处理每个受影响的单元格
        For Each cell In intersectRange
            If cell.Value = "Done" Then
                cell.Offset(0, 7).Value = Date
                cell.Offset(0, 8).Value = Environ("username")
            Else
                cell.Offset(0, 7).ClearContents
                cell.Offset(0, 8).ClearContents
            End If
        Next cell
    End If

Cleanup:
    ' 恢复事件设置,避免后续宏失效
    Application.EnableEvents = True
    If Err.Number <> 0 Then
        MsgBox "错误: " & Err.Description, vbExclamation
    End If
End Sub

核心修改说明:

  • 遍历单个单元格:不再直接对多单元格的Target做值判断,改为遍历Intersect返回的每个单元格,规避数组与字符串的类型不匹配问题。
  • 事件控制:修改单元格内容会再次触发Worksheet_Change,通过Application.EnableEvents临时禁用事件,防止循环触发,最后必须恢复。
  • 错误兜底:添加错误跳转逻辑,确保即使代码出错,事件设置也能正常恢复,避免后续宏无法触发。

内容的提问来源于stack exchange,提问作者George

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:22:48