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

VBA匹配ID粘贴行时触发“Method 'Range' of object '_Worksheet failed”报错

报错原因排查&修复方案
  • 问题1:未处理Match匹配失败场景
    你使用的Application.WorksheetFunction.Match在目标列找不到对应ID时会直接抛出运行时错误,首次运行时所有ID都能在Leases表C列找到对应值,后续数据更新后出现了不存在的ID,因此触发报错。
  • 问题2:单元格引用未限定工作表
    代码中ws.Range(Cells(rowchange, 8), Cells(rowchange, 67))里的Cells对象没有绑定工作表,默认取当前活动工作表的单元格,当活动工作表不是Leases时,会出现引用范围不匹配的错误。
  • 问题3:数组索引越界风险
    循环边界取的是UBound(dtarray),如果leaseid数组的行数小于dtarray的行数,读取leaseid(a, 4)时会出现索引越界报错。

修复后代码

leaseid = Sheet3.Cells(1, 1).CurrentRegion
dtarray = Sheet3.Cells(1, 15).CurrentRegion
Dim ws As Worksheet
Set ws = ActiveWorkbook.Sheets("Leases")
Dim txtid As String
Dim rowchange As Variant ' 改成Variant接收匹配错误值

' 先判断两个数组行数是否一致,避免索引越界
If UBound(leaseid) <> UBound(dtarray) Then
    MsgBox "leaseid和dtarray行数不匹配,请检查数据"
    Exit Sub
End If

For a = 2 To UBound(dtarray)
    txtid = leaseid(a, 4)
    ' 改用Application.Match,支持返回错误值不直接抛错
    rowchange = Application.Match(txtid, ws.Range("C:C"), 0)
    ' 判断是否匹配成功
    If Not IsError(rowchange) Then
        ' 给Cells加上ws限定,绑定Leases工作表
        ws.Range(ws.Cells(rowchange, 8), ws.Cells(rowchange, 67)) = Application.WorksheetFunction.Index(dtarray, a, 0)
        MsgBox (rowchange)
    Else
        ' 可自行添加不匹配时的处理逻辑,比如打印日志
        Debug.Print "ID:" & txtid & " 未找到匹配行"
    End If
Next

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:36:01