Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excel-';退出';循环在VBA中不工作_Excel_Vba - Fatal编程技术网

excel-';退出';循环在VBA中不工作

excel-';退出';循环在VBA中不工作,excel,vba,Excel,Vba,我在sharepoint/onedrive business上有一个包含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.Scree

我在sharepoint/onedrive business上有一个包含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循环,并在检测到该文件的任何循环中退出。这是行不通的。脚本将打开文件夹中的所有文件,而不会在第一个文件处停止

i、 e.我的预期结果是MsgBox显示最新文件:

22.05.2021.xlsx


请帮助我,非常感谢。

正如Rory在评论中所写,您的问题是,如果找不到第一个文件(即日期为今天的文件),err对象将设置为错误(1004)。一旦设置了错误,它将保持在那里,除非发生另一个将其设置为新错误号的错误。成功打开文件不会将错误设置为0

有两种处理方法。A) 使用
清除
手动重置错误

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命令的结果写入变量,并检查是否已设置:

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

我正在尝试VBA脚本,该脚本可以检测系统在此文件夹中创建的最新日期。
呃,为什么不循环文件并检查创建的日期?您想要最新的文件吗?>如果您尝试的第一个日期不起作用,Err将不再为0,因此您将不会看到消息或退出循环。分配
工作簿的结果。打开
变量并测试该变量是否为
。嗨@SiddharthRout,创建日期可能不起作用。创建日期仅取决于系统运行的时间。文件名是最可靠的。创建日期将为您提供最新创建的文件。一旦识别出该文件,就可以检索该文件的名称。我的意思是,假设有五个文件。您的代码将使用每个文件的
FileDateTime()
获取创建日期。一旦它确定哪个文件是最新创建的文件,您所需要的就是获取该文件的名称。我当然明白,文件创建日期可能与文件名不同。注意:如果系统随机命名文件,我的上述逻辑将毫无用处。例如,它昨天创建并命名了文件
24/5/2021
,今天创建并命名了文件
23/5/2021
(订单日期)。当然,你不会得到
2021年5月24日
Great thank FunThomas和@Rory,你的建议很有魅力。它们简单易懂,可以解决我错过的问题。