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

如何解决删除表格行时VBA代码的Type 13类型不匹配错误?

解决删除行触发Type 13类型不匹配问题的修正方案

原代码的核心问题:

  • 删除整行时,Target是多行/整行范围,intersectRange1包含R列整行单元格,直接调用Validation.Type会因部分单元格无验证规则报错
  • 直接判断Target.Value会因Target是多单元格范围返回数组,触发类型不匹配

修正后的代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    On Error GoTo ErrorHandler ' 捕获错误,确保事件能恢复
    
    Dim rng1 As Range
    Dim intersectRange1 As Range
    Dim cell As Range
    
    Set rng1 = Me.Range("R:R")
    Set intersectRange1 = Intersect(Target, rng1)
    
    If Not intersectRange1 Is Nothing Then
        ' 遍历交集里的每个单元格,避免多单元格范围导致的问题
        For Each cell In intersectRange1
            ' 临时忽略无验证单元格的错误,避免整行删除时触发异常
            On Error Resume Next
            Dim validationType As Integer
            validationType = cell.Validation.Type
            On Error GoTo ErrorHandler
            
            If validationType = 3 Then
                ' 确保单元格值为字符串类型,过滤删除操作导致的空值/错误值
                If TypeName(cell.Value) = "String" Then
                    Select Case cell.Value
                        Case "Pending Reqs"
                            UpdateTimestamp cell.Row, "AO"
                        Case "Reqs Received"
                            UpdateTimestamp cell.Row, "AP"
                        Case "Approved"
                            UpdateTimestamp cell.Row, "AQ"
                    End Select
                End If
            End If
        Next cell
    End If

ExitSub:
    Application.EnableEvents = True
    Exit Sub
    
ErrorHandler:
    ' 错误时直接恢复事件状态并退出
    Resume ExitSub
End Sub

' 封装时间戳更新逻辑,简化主代码
Private Sub UpdateTimestamp(rowNum As Long, colLetter As String)
    With Me.Cells(rowNum, colLetter)
        If .Value = "" Then
            .Value = Now
        Else
            .Value = .Value & ", " & Now
        End If
    End With
End Sub

关键改动说明:

  • 新增全局错误捕获,确保无论是否出错,Application.EnableEvents都能恢复为True,避免后续事件失效
  • 遍历intersectRange1内的单个单元格,规避多单元格范围操作的异常
  • 临时忽略无数据验证单元格的错误,解决整行删除时的规则不匹配问题
  • 判断单元格值类型后再处理,过滤删除操作产生的空值/错误值
  • 封装时间戳更新逻辑,让主代码结构更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 19:33:11