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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:05:26