如何使跨工作簿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
相关产品推荐
相关产品推荐

