【发布时间】:2021-05-25 10:29:19
【问题描述】:
我在 sharepoint/onedrive 业务上有一个文件夹,其中包含 Excel 文件。这些文件由系统每天生成并按该日期命名。
22.05.2021.xlsx
21.05.2021.xlsx
20.05.2021.xlsx
我正在尝试 VBA 脚本,它可以检测系统在此文件夹中创建的最新日期。
Sub Latest_file_in_range()
On Error Resume Next
Application.DisplayAlerts = False
Application.ScreenUpdating = False
For x = Now() To (Now() - 15) Step -1
Workbooks.Open Filename:="https://***-my.sharepoint.com/***/" & Format(x, "dd.mm.yyyy") & ".xlsx", UpdateLinks:=xlUpdateLinksNever
If Err = 0 Then
MsgBox x
Exit For
End If
Next
End Sub
基本上,我尝试从今天开始向后运行一个 for 循环,并在检测到该文件的任何循环处退出。这不起作用。该脚本会打开文件夹中的所有文件,而不会在第一个文件处停止。
即我的预期结果是 MsgBox 显示最新文件:
22.05.2021.xlsx
请帮帮我,非常感谢。
【问题讨论】:
-
I am trying VBA script that can detect what is latest date that the system creates in this folder.呃,为什么不遍历文件并检查创建日期?你想要最新的文件吗?> -
如果您尝试的第一个日期不起作用,则 Err 此后不会为 0,因此您将看不到消息或退出循环。将
workbooks.open的结果分配给一个变量并测试它是否为Nothing。 -
嗨@SiddharthRout,创建日期可能无效。创建日期仅取决于系统运行的时间。文件名最靠谱。
-
创建日期将为您提供最新创建的文件。一旦您确定了这一点,您就可以检索该文件的名称。我的意思是,假设有五个文件。您的代码将使用每个文件的
FileDateTime()获取创建日期。一旦它识别出哪个文件是最新创建的文件,您只需要获取文件的名称即可。我当然明白文件创建日期可能与文件名不同。 -
注意: 如果系统随机命名文件,我上面的逻辑将毫无用处。例如,它昨天创建并命名了文件
24/5/2021,今天它创建并命名了文件23/5/2021(一个日期)。那你当然不会得到24/5/2021