VBA文件引用适配版本变更:按列表顺序调用指定文件
解决方案
方法1:按文件名前缀匹配(更稳妥,不怕文件顺序变动)
这种方式不管版本号是v1还是v2,只要文件名开头是02-Address_或者03-Products_,就能精准找到对应的文件,不用每次版本更新都改代码。
代码示例:
Sub LaunchBatching3_00(sourcePath As String, exportFolder As String, activeName As String) Dim Adrs_PATH As String Dim Prod_PATH As String Dim fso As Object Dim folder As Object Dim file As Object Set fso = CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder(Application.ActiveWorkbook.Path) ' 查找开头为02-Address_的文件 For Each file In folder.Files ' 注意:原代码中的xlms是笔误,应为xlsm,可根据实际文件后缀调整 If LCase(file.Name) Like "02-address_*.xlsm" Then Adrs_PATH = file.Path Exit For ' 找到第一个匹配文件即停止遍历 End If Next ' 查找开头为03-Products_的文件 For Each file In folder.Files If LCase(file.Name) Like "03-products_*.xlsm" Then Prod_PATH = file.Path Exit For End If Next ' 此处放置后续使用Adrs_PATH和Prod_PATH的代码 End Sub
补充:如果同前缀的文件存在多个(比如同时保留v1和v2版本),这段代码会取第一个匹配到的文件。若需要获取最新修改的版本,可以增加逻辑对比文件的DateLastModified属性,筛选出最新的文件。
方法2:严格取文件列表排序后的第3个文件
如果确实需要固定获取文件夹内按名称排序后的第3个文件,可使用以下代码:
Sub LaunchBatching3_00(sourcePath As String, exportFolder As String, activeName As String) Dim Prod_PATH As String Dim fso As Object Dim folder As Object Dim files As Object Dim i As Integer, j As Integer Dim fileArr() As String Dim temp As String Set fso = CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder(Application.ActiveWorkbook.Path) Set files = folder.Files ' 将所有文件路径存入数组 ReDim fileArr(1 To files.Count) i = 1 For Each file In files fileArr(i) = file.Path i = i + 1 Next ' 按文件名不区分大小写排序 For i = LBound(fileArr) To UBound(fileArr) - 1 For j = i + 1 To UBound(fileArr) If LCase(fso.GetFileName(fileArr(i))) > LCase(fso.GetFileName(fileArr(j))) Then temp = fileArr(i) fileArr(i) = fileArr(j) fileArr(j) = temp End If Next j Next i ' 获取第3个文件的路径 If UBound(fileArr) >= 3 Then Prod_PATH = fileArr(3) Else MsgBox "文件夹内文件数量不足3个!" Exit Sub End If ' 若需获取第2个文件作为地址文件,可启用以下代码 ' Adrs_PATH = fileArr(2) ' 此处放置后续使用路径的代码 End Sub
注意:如果文件夹内文件数量少于3个,代码会弹出提示并退出,避免运行时错误。
内容的提问来源于stack exchange,提问作者Brittany Konold
相关产品推荐
相关产品推荐

