VBA实现Excel跨工作簿名称匹配插入关联公式及语法报错修复
问题修复方案
报错直接原因
你写公式的行存在两个语法错误:
- VBA中字符串内的双引号需要用两个双引号转义,且不能把VBA内部的工作表对象变量
ID直接放到Excel公式里,Excel无法识别VBA变量 - 外部工作簿的公式引用格式应为
'[工作簿名]工作表名'!单元格地址,你写的ID.Range("L" & C)是VBA语法,不是合法的Excel公式语法
逻辑优化点
原有代码循环范围固定为2到2,只能遍历第2行,需要改为动态读取两个表B列的最后一行数据,且无需频繁激活工作表、选中单元格,直接赋值即可提升运行效率。
修复后完整代码
Sub QTY_Fill_2() Dim i As Long, j As Long Dim ID_lastRow As Long, DD_lastRow As Long Dim ID As Worksheet, DD As Worksheet ' 绑定工作表对象,若工作簿后缀为.xls/.xlsm请同步修改 Set ID = Workbooks("First.xlsx").Sheets("Sheet1") Set DD = Workbooks("Second.xlsx").Sheets("Inventory") ' 动态获取两个表B列最后一行有数据的行号 ID_lastRow = ID.Cells(ID.Rows.Count, "B").End(xlUp).Row DD_lastRow = DD.Cells(DD.Rows.Count, "B").End(xlUp).Row ' 遍历Second工作簿所有名称行 For j = 2 To DD_lastRow ' 遍历First工作簿匹配对应名称 For i = 2 To ID_lastRow If DD.Range("B" & j).Value = ID.Range("B" & i).Value Then ' 匹配成功后写入3个单元格的跨工作簿引用公式,列号可按需调整 DD.Range("D" & j).Formula = "='[First.xlsx]Sheet1'!L" & i DD.Range("E" & j).Formula = "='[First.xlsx]Sheet1'!M" & i DD.Range("F" & j).Formula = "='[First.xlsx]Sheet1'!N" & i ' 匹配完成跳出内层循环,处理下一行数据 Exit For End If Next i Next j End Sub
注意事项
- 如果你的两个工作簿未保存,或者后缀为带宏的
.xlsm格式,把公式里的First.xlsx改成你实际的工作簿名即可,无需加后缀 - 代码默认将First表的L、M、N三列数据对应写入Second表的D、E、F列,如果你需要的列范围不同,自行修改公式里的列号即可
- 该公式为跨工作簿引用,First工作簿数据更新后,打开Second工作簿时选择更新外部数据即可实现同步
内容的提问来源于stack exchange,提问作者Stephen Mulhern
相关产品推荐
相关产品推荐

