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

Excel跨工作簿复制A-CV特定范围时遇运行时错误91求助

解决Excel VBA复制指定列时的运行时错误91及整行复制问题

嘿,我来帮你搞定这个VBA的小麻烦!你遇到的运行时错误91(对象变量未设置),还有之前注释的循环会复制整行的问题,我给你拆解清楚并给出修正方案:

一、先搞定错误91的根源

这个错误说白了就是你用到的rng对象根本没被正确赋值——要么是你查找匹配单元格的时候没找到符合条件的内容,导致rng变成了Nothing;要么是你没给rng用Set关键字做对象赋值,直接就去调用Copy方法了。只要把对象的引用搞扎实,这个错误就能解决。

二、实现「匹配值时仅复制A-CV列」的需求

你之前的循环会复制整行,是因为你用了整行的引用(比如Rows(i).Copy),我们只要把复制的范围精准限定在A到CV列就行。下面是完整的修正代码,我加了详细注释,你可以直接改参数用:

Sub CopyTargetColumns()
    Dim sourceWB As Workbook, targetWB As Workbook
    Dim sourceWS As Worksheet, targetWS As Worksheet
    Dim lastSourceRow As Long, currentRow As Long, nextTargetRow As Long
    Dim matchCriteria As Variant ' 存储你要匹配的单元格值
    
    ' ====== 第一步:替换成你实际的工作簿和工作表信息 ======
    Set sourceWB = ThisWorkbook ' 假设源数据在当前打开的工作簿里
    Set targetWB = Workbooks.Open("C:\你的目标工作簿完整路径.xlsx") ' 替换成你的目标文件路径
    Set sourceWS = sourceWB.Sheets("源数据工作表名") ' 替换成源表名称
    Set targetWS = targetWB.Sheets("目标工作表名") ' 替换成目标表名称
    
    ' ====== 第二步:初始化参数 ======
    nextTargetRow = 2 ' 目标表从第2行开始粘贴(假设第1行是表头)
    matchCriteria = "你要匹配的具体值" ' 替换成你的匹配条件,比如"张三"或者123
    
    ' ====== 第三步:遍历源数据并复制 ======
    lastSourceRow = sourceWS.Cells(sourceWS.Rows.Count, "A").End(xlUp).Row ' 获取源表最后一行
    For currentRow = 2 To lastSourceRow ' 从第2行开始遍历(跳过源表表头)
        ' 这里的判断条件可以改,比如你要匹配C列就改成Cells(currentRow, "C")
        If sourceWS.Cells(currentRow, "B").Value = matchCriteria Then
            ' 精准复制当前行的A到CV列,而不是整行
            sourceWS.Range("A" & currentRow & ":CV" & currentRow).Copy
            ' 粘贴到目标表的对应行,用xlPasteValues只粘贴值,要格式的话去掉这个参数
            targetWS.Range("A" & nextTargetRow).PasteSpecial xlPasteValues
            nextTargetRow = nextTargetRow + 1 ' 目标行下移一行,准备下一次粘贴
        End If
    Next currentRow
    
    ' 清理剪贴板,避免弹出粘贴提示
    Application.CutCopyMode = False
    MsgBox "指定列数据复制完成!"
End Sub

三、几个关键提醒

  • 对象必须用Set赋值:所有的Workbook、Worksheet对象都得用Set关键字明确赋值,绝对不能省略,这是解决错误91的核心。
  • 精准限定复制范围:用Range("A" & currentRow & ":CV" & currentRow)就能选中当前行的A到CV列,完美替代整行复制的写法。
  • 可选:加错误捕获:如果担心某些行复制失败,可以加一段简单的错误处理,避免程序崩溃:
On Error Resume Next
sourceWS.Range("A" & currentRow & ":CV" & currentRow).Copy
If Err.Number <> 0 Then
    MsgBox "第" & currentRow & "行复制失败:" & Err.Description
    Err.Clear
End If
On Error GoTo 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:38:22