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

如何使跨工作簿VLOOKUP的文件名动态化?附现有VBA代码

动态替换VLOOKUP中的工作簿文件名

嘿,我来帮你搞定这个动态VLOOKUP的问题!你已经通过Sheet3.TextBox1获取了目标工作簿的路径并成功打开它了,现在只需要把公式里硬编码的[Rate.xlsx]替换成这个打开工作簿的动态文件名就可以了,具体修改如下:

核心思路

你已经用Set WBK = Workbooks.Open(INPUT_PATH)打开了目标工作簿,直接用WBK.Name就能拿到这个工作簿的文件名(不管用户选的是Rate.xlsx还是其他文件),然后把这个文件名拼接到VLOOKUP的公式字符串里就行。另外注意你原代码里的公式语句都没闭合双引号,这会导致运行报错,我也一起帮你修正了。

修改后的完整代码

Dim INPUT_PATH As String
Dim WBK As Workbook
Dim targetWBName As String ' 用来存打开的工作簿名称

' 先关闭屏幕更新和警告,让代码运行更流畅
Application.ScreenUpdating = False
Application.DisplayAlerts = False

INPUT_PATH = Sheet3.TextBox1.Text
Set WBK = Workbooks.Open(INPUT_PATH)
WBK.Windows(1).Visible = True

' 获取目标工作簿的文件名
targetWBName = WBK.Name

ThisWorkbook.Activate
ActiveSheet.Unprotect Password:="nch"

' 动态生成带可变文件名的VLOOKUP公式
Range("D10").Formula = "=VLOOKUP(G8,'[" & targetWBName & "]Asset Depreciation'!$C:$J,2,0)"
Range("G10").Formula = "=VLOOKUP(G8,'[" & targetWBName & "]Asset Depreciation'!$C:$J,3,0)"
Range("D12").Formula = "=VLOOKUP(G8,'[" & targetWBName & "]Asset Depreciation'!$C:$J,4,0)"
Range("G12").Formula = "=VLOOKUP(G8,'[" & targetWBName & "]Asset Depreciation'!$C:$J,5,0)"
Range("D14").Formula = "=VLOOKUP(G8,'[" & targetWBName & "]Asset Depreciation'!$C:$J,6,0)"
Range("G14").Formula = "=VLOOKUP(G8,'[" & targetWBName & "]Asset Depreciation'!$C:$J,7,0)"
Range("F16").Formula = "=VLOOKUP(G8,'[" & targetWBName & "]Asset Depreciation'!$C:$J,8,0)"

' 恢复屏幕更新和警告,可选:如果不需要保留打开的工作簿,可以关闭它
Application.ScreenUpdating = True
Application.DisplayAlerts = True
WBK.Close SaveChanges:=False ' 这里设为False是不保存修改,根据你的需求调整

小优化建议

  • 原代码里的Range("B6").Select其实没起到任何作用,直接删掉就行,避免不必要的操作
  • 用变量存工作簿名称会让代码更清晰,以后要修改也更方便
  • 关闭屏幕更新和警告能提升代码运行速度,还不会弹出烦人的提示框

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:48:29