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

VBA运行时错误13:拖拽初始值触发类型不匹配问题求助

解决VBA拖拽多单元格触发错误13的问题

问题原因

拖拽操作会让Target变成多单元格区域,此时Target.Value返回的是数组,原代码直接用<>比较数组和PreviousValue,触发类型不匹配错误(错误13)。另外原代码在Worksheet_Change中重复声明PreviousValue,覆盖了模块级变量,导致逻辑异常。

修复方案

  1. 移除Worksheet_Change中重复声明的Dim PreviousValue,保留模块级变量
  2. 处理多单元格场景:循环遍历Target中的每个单元格,逐个比较原值和新值
  3. 在Worksheet_SelectionChange中,针对多单元格自动存储每个单元格的原值(以数组形式)

修改后的完整代码

' 模块级变量,存储选中单元格的原值
Dim PreviousValue As Variant

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cell As Range
    Dim ws As Worksheet
    Dim i As Long
    Dim cellIndex As Integer
    
    ' 处理B列自动填充日期逻辑
    For Each Cell In Target
        If Cell.Column = Range("B:B").Column Then
            If Cell.Value <> "" Then
                Cells(Cell.Row, "A").Value = Now
            Else
                Cells(Cell.Row, "A").Value = ""
            End If
        End If
    Next Cell
    
    Set ws = Sheets("log")
    
    ' 遍历每个修改的单元格,记录日志
    For Each Cell In Target
        ' 计算当前单元格在选中区域中的索引,对应PreviousValue数组中的值
        cellIndex = Cell.Row - Target.Row + 1
        ' 分别处理单个单元格和多单元格的情况
        If (IsArray(PreviousValue) And Cell.Value <> PreviousValue(cellIndex, 1)) Or _
           (Not IsArray(PreviousValue) And Cell.Value <> PreviousValue) Then
            
            i = ws.Range("A" & Rows.Count).End(xlUp).Row + 1
            With ws
                .Range("A" & i).Value = Application.UserName
                .Range("B" & i).Value = Cell.Address
                .Range("C" & i).Value = IIf(IsArray(PreviousValue), PreviousValue(cellIndex, 1), PreviousValue)
                .Range("D" & i).Value = Cell.Value
                .Range("E" & i).Value = Format(Now(), "dd/mm/yyyy")
            End With
        End If
    Next Cell
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ' 存储选中单元格的值,多单元格时自动转为数组
    PreviousValue = Target.Value
End Sub

关键修改说明

  • 保留模块级PreviousValue,避免重复声明覆盖变量
  • 遍历每个修改的单元格,逐个处理日志,规避多单元格的数组比较问题
  • 通过IsArray判断PreviousValue类型,适配单个/多单元格场景
  • 用cellIndex定位数组中对应单元格的原值,确保日志记录准确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:25:30