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

VBA跨表读写脚本出现Error13类型不兼容错误求助

问题排查与修复方案

错误原因分析

你遇到的Error 13(类型不匹配)主要由三个核心问题导致:

  1. 语法错误:定义transportColumn的代码缺少闭合括号,VBA无法正确解析范围对象。
  2. 范围引用逻辑错误:若"Transport"和"Faktura"是工作表表头而非命名区域,直接用.Range("Transport")会引用错误范围;同时循环内重复定义范围,既低效又易引发对象类型冲突。
  3. 查找逻辑颠倒:原代码循环Faktura列匹配LADUNGSNUMMER的值,与需求完全相反——应该是在Transport列查找值,再取对应行的Faktura值。

修复后的完整代码

Sub NVLFakturenLaden()
    Dim wsNVL As Worksheet, wsDATA As Worksheet
    Dim loadNumberRange As Range
    Dim cell As Range
    Dim counter As Long
    Dim transportCol As Long, fakturaCol As Long
    Dim lastRow As Long
    Dim result As String
    Dim i As Long
    
    ' 初始化工作表对象
    Set wsNVL = ThisWorkbook.Sheets("NVL")
    Set wsDATA = ThisWorkbook.Sheets("DATA")
    
    ' 定位DATA表中Transport和Faktura列的列号(假设表头在第一行)
    transportCol = wsDATA.Rows(1).Find(What:="Transport", LookIn:=xlValues, LookAt:=xlWhole).Column
    fakturaCol = wsDATA.Rows(1).Find(What:="Faktura", LookIn:=xlValues, LookAt:=xlWhole).Column
    
    ' 获取DATA表Transport列的最后一行数据
    lastRow = wsDATA.Cells(wsDATA.Rows.Count, transportCol).End(xlUp).Row
    
    ' 定义NVL表的LADUNGSNUMMER范围
    Set loadNumberRange = wsNVL.Range("LADUNGSNUMMER")
    
    counter = 0
    
    ' 遍历LADUNGSNUMMER列的每个值
    For Each cell In loadNumberRange
        result = ""
        ' 在DATA表Transport列查找匹配值,拼接对应Faktura
        For i = 2 To lastRow ' 跳过表头行,从第二行开始遍历
            If wsDATA.Cells(i, transportCol).Value = cell.Value Then
                If result <> "" Then
                    result = result & ", " & wsDATA.Cells(i, fakturaCol).Value
                Else
                    result = wsDATA.Cells(i, fakturaCol).Value
                End If
            End If
        Next i
        
        ' 将结果写入EX-Fakturen列(LADUNGSNUMMER列右侧一列)
        cell.Offset(0, 1).Value = result
        
        If result <> "" Then counter = counter + 1
    Next cell
    
    MsgBox "已为 " & counter & " 条运输记录加载对应发票信息。", vbInformation
End Sub

关键修复点说明

  • 修正语法错误:补全原代码中缺失的闭合括号,确保范围对象能正确创建。
  • 优化范围引用:
    • 通过Find方法动态定位表头列号,避免依赖命名区域或硬编码列标,适配不同表结构。
    • 将范围初始化逻辑移到循环外,仅执行一次,大幅提升运行效率。
  • 修正查找逻辑:遍历Transport列匹配目标值,取对应行的Faktura值拼接,符合一对多的需求逻辑。
  • 提升鲁棒性:默认表头在第一行,若你的表头位置不同,只需调整Rows(1)和i=2的参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:52:11