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

VBA用Application.Match时出现运行时错误'13'类型不兼容求助

解决VBA运行时错误'13':类型不兼容的问题

这个运行时错误13的问题我太熟悉了——核心原因是你对Application.Match的返回值特性理解有偏差,咱们一步步拆解解决:

错误根源

Application.Match的返回值不是布尔值:

  • 当找到匹配项时,它返回匹配的行号(数值类型)
  • 当找不到匹配项时,它返回错误值(Error 2042)

你原代码里直接把Application.Match(...)放在And后面,相当于让VBA把「数值/错误值」和前面的「布尔值(单元格是否非空)」做逻辑运算,这就触发了类型不兼容的错误。

修正方案

我们需要用IsError()函数来判断Match的结果是否为错误值,同时建议先把单元格的值存入变量,提升代码效率和可读性:

Dim cellValue As Variant
Dim matchResult As Variant

' 先把目标单元格的值存入变量,避免多次访问工作表
cellValue = Tabelle3.Cells(7 + i, 1).Value

' 调整条件:先判断单元格非空,再判断匹配结果不是错误值(即找到匹配)
If cellValue <> "" And Not IsError(Application.Match(cellValue, Tabelle8.Range("A:A"), False)) Then
    ' 这里写入满足两个条件后的执行逻辑
Else
    ' 任一条件不满足,跳过当前i(可以直接省略Else,循环会自动进入下一次迭代)
End If

额外注意事项

  • 用Variant类型存储cellValue和matchResult:因为单元格值可能是文本、数值等多种类型,而Match的结果可能是数值或错误值,Variant能兼容这些情况。
  • 如果需要排除公式返回的空文本或者空格组成的内容,可以把cellValue <> ""替换为Trim(cellValue) <> "",这样更严谨。
  • 如果你习惯用工作表函数的写法,也可以用WorksheetFunction.Match,但它找不到匹配时会直接抛出错误,需要用On Error Resume Next来捕获,相对来说Application.Match配合IsError()的写法更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:27:20