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

VBA中Index+Match函数出现类型不匹配错误求助

问题分析与修复方案

你的VBA代码出现类型不匹配错误,核心原因是拼写错误和对象引用不规范,以下是具体修复点和优化建议:

1. 修正拼写错误

  • Worksheet("sheet2") 应为 Worksheets("sheet2")(缺少复数后缀s)
  • WorksheetFuncion 拼写错误,正确写法是 WorksheetFunction(少了字母t)
  • Dim LastRow As long 规范写法为 Dim LastRow As Long(VBA数据类型首字母建议大写,避免混淆)

2. 修复对象引用问题

  • 在With Worksheets("sheet1")代码块中,Cells(i,28)必须加上前缀.,否则会默认引用当前活动工作表而非指定的sheet1,正确写法是.Cells(i,28)
  • 已定义Destination和Origin工作表对象,后续直接调用这些对象即可,无需重复写Worksheets("sheet1"),提升代码可读性和执行效率

修复后的完整代码

Sub CalculateTracker()
    Dim LastRow As Long
    Dim Destination As Worksheet
    Set Destination = Worksheets("sheet1")
    Dim i As Integer
    Dim Origin As Worksheet
    Set Origin = Worksheets("sheet2")

    ' 通过已定义的Destination对象获取数据最后一行
    With Destination
         LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    End With

    For i = 2 To LastRow
        With Destination
             ' 修正拼写错误,规范对象引用
             .Cells(i, 28).Value = WorksheetFunction.IfError(WorksheetFunction.Index(Origin.Range("AZ:AZ"), Application.Match(Destination.Range("X" & i), Origin.Range("B:B"), 0)), 0)
        End With
    Next i 
End Sub

额外优化建议

  • 避免整列引用Origin.Range("AZ:AZ")和Origin.Range("B:B"),可以缩小为实际数据范围,比如Origin.Range("B1:B" & Origin.Cells(Origin.Rows.Count, "B").End(xlUp).Row),大幅提升匹配效率
  • 也可以单独处理Match的错误情况,替代WorksheetFunction.IfError,逻辑更清晰:
For i = 2 To LastRow
    Dim matchResult As Variant
    matchResult = Application.Match(Destination.Range("X" & i).Value, Origin.Range("B:B"), 0)
    With Destination
        If IsError(matchResult) Then
            .Cells(i, 28).Value = 0
        Else
            .Cells(i, 28).Value = Origin.Range("AZ" & matchResult).Value
        End If
    End With
Next i

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:22:45