【问题标题】:excel - 'Exit For' loop not working in VBAexcel - 'Exit For' 循环在 VBA 中不起作用
【发布时间】: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

标签: excel vba


【解决方案1】:

正如 Rory 在 cmets 中所写,您的问题是,如果找不到第一个文件(即日期为 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

【讨论】:

  • 非常感谢 FunThomas 和 @Rory,您的建议很有效。它们简单易懂,可以解决我错过的问题。
猜你喜欢
  • 2018-04-22
  • 1970-01-01
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
相关资源
最近更新 更多