繁体   English   中英

excel - 'Exit For' 循环在 VBA 中不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM