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

VBA按列值复制行至另工作簿时出现运行时错误'13'排查

问题原因及解决办法

核心错误原因

  • 变量类型声明错误:代码中shtDest被声明为Workbook类型,但实际需要指向**工作表(Worksheet)**对象,赋值时Set shtDest = wb.Sheets("Orders Confirmed")直接触发「类型不匹配」错误,这是报错的直接原因。
  • 其他潜在问题:
    • 仅复制A列单个单元格,未复制整行,不符合需求;
    • Rows.Count未指定所属工作表,默认引用活动工作表行数,可能导致目标行定位错误;
    • 直接判断单元格值等于"x",若A列存在错误值(如#N/A),会再次触发类型不匹配。

修正后的代码

Sub ConfirmedDatabaseAdd()
    Const WB_PATH As String = "S:\Dott Work\Good Order 2024\Quotes\Confirmed Orders.xlsx"
    Dim srcSht As Worksheet, wb As Workbook, shtDest As Worksheet, i As Long
    Dim lastSrcRow As Long, lastDestRow As Long

    Set srcSht = ActiveSheet
    lastSrcRow = srcSht.Range("A" & srcSht.Rows.Count).End(xlUp).Row

    For i = 2 To lastSrcRow
        ' 先检查单元格是否为错误值,再判断内容
        If Not IsError(srcSht.Cells(i, 1)) Then
            If UCase(srcSht.Cells(i, 1).Value) = "X" Then ' 兼容大小写输入
                If shtDest Is Nothing Then
                    Set wb = Workbooks.Open(Filename:=WB_PATH)
                    Set shtDest = wb.Sheets("Orders Confirmed")
                End If
                ' 复制整行到目标工作表的下一行,保留格式
                lastDestRow = shtDest.Range("A" & shtDest.Rows.Count).End(xlUp).Row + 1
                srcSht.Rows(i).Copy Destination:=shtDest.Rows(lastDestRow)
            End If
        End If
    Next i

    If Not wb Is Nothing Then
        wb.Close SaveChanges:=True
    End If
End Sub

关键修改点说明

  • 修正变量类型:将shtDest As Workbook改为shtDest As Worksheet,匹配赋值对象的实际类型;
  • 复制整行:用srcSht.Rows(i).Copy替代原代码的单个单元格复制,确保整行内容和格式同步;
  • 明确工作表范围:所有Rows.Count都指定所属工作表(srcSht.Rows.Count、shtDest.Rows.Count),避免引用错误;
  • 增加错误值判断:用IsError先过滤错误单元格,防止比较时触发类型不匹配;
  • 兼容大小写:用UCase()统一转为大写后比较,适配输入"X"或"x"的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 10:42:50