首页 > 解决方案 > 有没有办法使用 VBA 在未知文件夹中打开具有已知名称的文件?

问题描述

我每天运行一系列报告,并根据日期将它们保存在一个文件夹中。例如:C:\Users\Desktop\Test\Current\2020 08 05\Report_Name 2020 08 05.xlsx

第二天,我运行新报告并将“2020 08 05”文件夹移至存档。但是新报告会从前一天的报告中提取数据,因此我需要在不指定日期文件夹名称的情况下打开它。

我试过使用通配符,但这不起作用。

    Sub OpenReport()
    Dim sFound As String
    Dim Path As String
    
    Path = "C:\Users\Desktop\Test\Current\*\"
    
    sFound = Dir(Path & "\Report_Name*.xlsx")
        If sFound <> "" Then
            Workbooks.Open Filename:=Path & "\" & sFound
        End If

结束子

标签: excelvba

解决方案


由于文件路径的名称是固定的,除了日期,直接生成即可:

Function yesterdayReport() As String
    Const sBasePath As String = "C:\Users\Desktop\Test\Current\"
    Dim sDT As String

sDT = Format(Date - 1, "yyyy mm dd")
yesterdayReport = sBasePath & sDT & "\Report_Name " & sDT & ".xlsx"
    
End Function

如果您需要查找前一个工作日,考虑到周末和节假日,您可以使用其中一个WorkDay功能。

例如:

Option Explicit
Function yesterdayReport() As String
    Const sBasePath As String = "C:\Users\Desktop\Test\Current\"
    Dim sDT As String, dt As Date
    Dim vHolidays
    
vHolidays = Array(#1/1/2020#, #7/4/2020#, #8/5/2020#)
dt = Application.WorksheetFunction.WorkDay(Date, -1, vHolidays)

sDT = Format(dt, "yyyy mm dd")
yesterdayReport = sBasePath & sDT & "\Report_Name " & sDT & ".xlsx"
    
End Function

正如我所展示的,您的holiday论点可以是硬编码的,也可以从工作表上的范围获得。

如果您的周末不是周六/周日,情况会有所不同。


推荐阅读