循环遍历 OneDrive 中的所有 Excel 个文件

Loop through all the Excel files in OneDrive

我编写了 VBA 代码来遍历 OneDrive 文件夹中的所有 Excel 文件 (.xlsm) 并执行某些操作。我使用 Set Wb = Application.Workbooks.Open(path) 它大部分时间都有效,例如,循环连续 5 次正常工作,然后第 6 次它会显示错误

Run-time Error '1004' - Method 'Open' of object 'Workbooks' failed

在其中一个随机文件上。然后我第 7 次 运行 宏,它再次使用相同的文件(也使用宏之前无法打开的文件)。我认为问题可能在于文件在 OneDrive 中。

能否请您告诉我可能是什么问题以及如何防止此错误再次发生?

如果这是一个时间问题,例如打开文件时因为 OneDrive 响应不够快(超时),那么您可以通过尝试打开文件来解决这个问题,例如连续 3 次等待 2 秒。

Option Explicit

Public Function MultiAttemptWorkbookOpen(ByVal Path As String, ByVal MaxAttempts As Long, Optional ByVal WaitBetweenAttempts As Long = 0) As Workbook
    Dim wb As Workbook
        
    Dim iAttempts As Long
    Do While iAttempts < MaxAttempts And wb Is Nothing
        iAttempts = iAttempts + 1
        On Error Resume Next
        Set wb = Application.Workbooks.Open(Path)
        On Error GoTo 0
        
        If wb Is Nothing And WaitBetweenAttempts > 0 Then
            Application.Wait DateAdd("s", WaitBetweenAttempts, Now)
        End If
    Loop
    
    If wb Is Nothing Then
        Err.Raise Err.Number
    Else
        Set MultiAttemptWorkbookOpen = wb
    End If
End Function

然后可以这样使用

Set wb = MultiAttemptWorkbookOpen(path, MaxAttempts:=3, WaitBetweenAttempts:=2)

而不是

Set Wb = Application.Workbooks.Open(path)

因此它会尝试 3 次打开文件并在两次尝试之间等待 2 秒。

如果仍然无法打开文件,则会抛出错误。