excel - 有没有办法使用 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
结束子
解决方案
由于文件路径的名称是固定的,除了日期,直接生成即可:
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
论点可以是硬编码的,也可以从工作表上的范围获得。
如果您的周末不是周六/周日,情况会有所不同。
推荐阅读
- java - 下载时无法获得音频进度条
- python - 即使未调用 Python 和 SQLite3 函数也会运行
- python - 切换大写和小写python
- dataweave - 超过 6 位小数的数字转换为指数形式
- python - 你将如何在 python 中打印数字 1,2,3,4,5,6,7,8,18,19,20,21,22,23,24?
- visual-studio-code - 在 Visual Studio Code 中格式化多个文档
- sql - ORA-00936: 缺少 '=' 的表达式
- esp32 - 是否有适用于 ESP32-S2 或 ESP32 芯片的模拟器?
- java - SpringFramework JavaMailSender FileNotFoundException(不允许操作)但文件存在
- nginx - 无法在 E 盘 windows 7 中运行 nginx 命令,但可以从 C:\nginx\ 运行