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

Excel VBA调用Match无匹配报运行时错误13类型不匹配如何解决

问题解决方法

核心错误原因

触发运行时错误13的根本原因是变量类型不兼容:

  • 你声明了MaterialDatenbankZeile As Integer,但Application.Match方法在未匹配到目标值时,返回的是Error类型的结果,Integer类型变量无法接收Error值,直接触发类型不匹配。
  • 额外隐患:代码中使用Application.WorksheetFunction.Match时,如果未匹配到值会直接抛出运行时错误,没有后续判断的机会;同时Integer类型最大仅支持数值到32767,当数据行号超过该值时会出现溢出错误。

修正方案

只需要调整几处变量声明和写法即可,修正后的完整代码如下:

Sub Traceability()
    ' 直接指定工作表,不需要Activate切换避免引用错误
    Dim wsMaterial As Worksheet, wsUebersicht As Worksheet
    Set wsMaterial = Worksheets("Materialien")
    Set wsUebersicht = Worksheets("Uebersicht")

    Dim GescanntesEndgeraet As Variant
    Dim GescanntesMaterial As Variant
    ' 匹配相关变量用Variant支持接收错误值,行号用Long避免溢出
    Dim ZeileEndgeraetStart As Variant
    Dim ZeileEndgeraetEnd As Long
    Dim MaterialDatenbankZeile As Variant
    Dim MaterialDatenbank As Variant
    Dim MaterialienRange As Range

    GescanntesEndgeraet = wsUebersicht.Cells(7, "C").Value
    GescanntesMaterial = wsUebersicht.Cells(11, "C").Value

    ' 匹配设备行号,增加未匹配到的错误处理
    ZeileEndgeraetStart = Application.Match(GescanntesEndgeraet, wsMaterial.Range("A:A"), 0)
    If IsError(ZeileEndgeraetStart) Then
        wsUebersicht.Cells(7, "F").Value = "false"
        Exit Sub
    End If
    ZeileEndgeraetEnd = ZeileEndgeraetStart + Application.WorksheetFunction.CountIf(wsMaterial.Range("A:A"), GescanntesEndgeraet) - 1

    Set MaterialienRange = wsMaterial.Range("B" & ZeileEndgeraetStart & ":B" & ZeileEndgeraetEnd)
    ' 此时MaterialDatenbankZeile是Variant类型,可以正常接收错误值
    MaterialDatenbankZeile = Application.Match(GescanntesMaterial, MaterialienRange, 0) 

    If IsError(MaterialDatenbankZeile) Then
        MaterialDatenbank = "A"
    Else
        MaterialDatenbankZeile = MaterialDatenbankZeile + ZeileEndgeraetStart - 1
        MaterialDatenbank = wsMaterial.Cells(MaterialDatenbankZeile, "B").Value
    End If
    
    If MaterialDatenbank = GescanntesMaterial Then
        wsUebersicht.Cells(7, "F").Value = "true"
    Else
        wsUebersicht.Cells(7, "F").Value = "false"
    End If
            
    wsUebersicht.Activate
End Sub

关键修改说明

  1. 将MaterialDatenbankZeile的声明类型从Integer改为Variant,可以同时接收匹配成功的行号数值和匹配失败的Error值,你的原有IsError判断逻辑就能正常生效,不会半路报错。
  2. 新增了工作表对象变量,所有范围引用都绑定到对应工作表,避免Activate切换表带来的范围引用错误。
  3. 设备号匹配改用Application.Match并增加错误判断,当输入的设备号不存在时也不会直接报错,直接返回false结果。
  4. 行号相关变量改用Long或Variant,避免行号超过32767时的溢出错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:48:01