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

VBA执行时源文件已打开,INDEX/MATCH仍返回#N/A?及错误排查

Excel VBA INDEX/MATCH 跨文件匹配问题

1. 初始公式实现异常

使用以下VBA代码批量写入跨文件INDEX/MATCH公式:

Range("F2:F" & TotalRowsSQL).Formula = "=INDEX('PATH\" & RåfilDate & "HørkramRå.csv'!AB2:AB" & TotalRowsRAW & ",MATCH(A2,'PATH\" & RåfilDate & "HørkramRå.csv'!A2:A" & TotalRowsRAW & ",0))"

伪代码示意:

Range(MyRange).Formula = "=INDEX('FullPathToDifferentFile'!RangeInThatFile,MATCH(LookupValue,'FullPathToDifferentFile'!RangeInThatFile,0))"

执行过程无报错,但打开公式所在文件后,单元格仅返回#N/A。Excel提示需打开源文件(RåfilDate & "HørkramRå.csv")才能更新值,但该文件在宏执行时已处于打开状态。

尝试将公式结果转为值:

Range("F2:F" & TotalRowsSQL).Value = Range("F2:F" & TotalRowsSQL).Value

结果仅得到文本型的N/A。

2. 直接用VBA解析公式(首次尝试)

改用VBA直接计算匹配值,代码如下:

Dim wb1 As Workbook, wb2 As Workbook
Dim wb2path As String
Dim sh As Worksheet
Dim wf As WorksheetFunction

wb2path = "MyActualPath"

Set wb1 = ThisWorkbook
Set wb2 = Workbooks.Open(wb2path)
Set sh = wb1.ActiveSheet
Set wf = Application.WorksheetFunction


wb1.Activate

For x = 2 To TotalRowsSQL
    Range("F" & x).Value = Application.WorksheetFunction.Index(path & "!AB2:AB" & TotalRowsRAW, Application.WorksheetFunction.Match(A2, path & "!A2:A" & TotalRowsRAW, 0))
Next x

For x = 2 To TotalRowsSQL
    Range("G" & x).Value = Application.WorksheetFunction.Index(path & "!AC2:AC" & TotalRowsRAW, Application.WorksheetFunction.Match(A2, path & "!A2:A" & TotalRowsRAW, 0))
Next x

For x = 2 To TotalRowsSQL
    Range("H" & x).Value = Application.WorksheetFunction.Index(path & "!AU2:AU" & TotalRowsRAW, Application.WorksheetFunction.Match(A2, path & "!A2:A" & TotalRowsRAW, 0))
Next x

运行时触发错误1004:无法获取WorksheetFunction类的Match属性。

3. 修正代码后仍报错

调整代码,明确工作簿和工作表引用:

Dim wb1 As Workbook, wb2 As Workbook

Windows(Today & "HørkramProducentNavn").Activate
Set wb1 = ThisWorkbook

Windows(RåfilDate & "HørkramRå.csv").Activate
Set wb2 = ThisWorkbook

wb1.Activate

Dim sh As Worksheet
Set sh = wb1.ActiveSheet

Dim wf As WorksheetFunction
Set wf = Application.WorksheetFunction


For x = 2 To TotalRowsSQL
    sh.Range("F" & x).Value = wf.Index(wb2.Sheets(1).Range("AB2:AB" & TotalRowsRAW), wf.Match(sh.Range("A" & x), wb2.Sheets(1).Range("A2:A" & TotalRowsRAW, 0)))
Next x

For x = 2 To TotalRowsSQL
    sh.Range("G" & x).Value = wf.Index(wb2.Sheets(1).Range("AC2:AC" & TotalRowsRAW), wf.Match(sh.Range("A" & x), wb2.Sheets(1).Range("A2:A" & TotalRowsRAW, 0)))
Next x

For x = 2 To TotalRowsSQL
    sh.Range("H" & x).Value = wf.Index(wb2.Sheets(1).Range("AU2:AU" & TotalRowsRAW), wf.Match(sh.Range("A" & x), wb2.Sheets(1).Range("A2:A" & TotalRowsRAW, 0)))
Next x

仍触发相同的1004错误,调试发现循环到x=5时出错,且F2-F4单元格始终为空。经排查推测,错误原因是匹配项不存在,计划改用Application.Match替代WorksheetFunction.Match。


内容的提问来源于stack exchange,提问作者Jens-Emil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:20:30