循环遍历 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 秒。
如果仍然无法打开文件,则会抛出错误。
我编写了 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 秒。
如果仍然无法打开文件,则会抛出错误。