[英]excel - 'Exit For' loop not working in VBA
我在 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
请帮我解决这个问题,非常感谢。
正如 Rory 在评论中所写,您的问题是,如果找不到第一个文件(即日期为today的文件),则 err-object 设置为错误(1004)。 一旦设置了错误,它就会一直存在,除非发生另一个错误并将其设置为新的错误号。 成功打开文件不会将 err 设置为 0。
有两种处理方法。 A) 使用Clear
手动重置错误。
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
Err.Clear
Next
B) 将 open-Command 的结果写入一个变量并检查它是否被设置:
For x = Now() To (Now() - 15) Step -1
Dim wb as Workbook
Set wb = Workbooks.Open("https://***-my.sharepoint.com/***/" & Format(x, "dd.mm.yyyy") & ".xlsx", UpdateLinks:=xlUpdateLinksNever)
If Not wb Is Nothing Then
MsgBox x
Exit For
End If
Next
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.