我在运行VBA时打开工作表时遇到问题(由于Excel / VBA被占用,据我所知,它阻止了另一个工作表的打开)。
SendKeys ("%O")
Application.Wait DateAdd("s", 1, Now)
'Loop that waits for file to open
Dim TestWorkbook As Workbook
Set TestWorkbook = Nothing
On Error Resume Next
Set TestWorkbook = Workbooks("export.csv")
OpenLoop:
If TestWorkbook Is Nothing Then
Application.Wait DateAdd("s", 1, Now)
GoTo OpenLoop
Else
End If
'Loop that waits for file to open (End)
Workbooks("export.csv").Activate
SendKeys ("%O")
用于在Internet Explorer上打开文件,如下所示:
如果代码在此处结束,则将在VBA完成后成功打开。 现在,它只是陷入循环,因为VBA忙于阻止文件打开。
问题:我需要一个允许文件打开的解决方案,以便VBA可以继续并在下载的文件夹上工作。
任何帮助将不胜感激,谢谢您。
答案 0 :(得分:0)
如果Set TestWorkbook = Workbooks("export.csv")
产生Nothing
,则以下代码将永远循环
OpenLoop:
If TestWorkbook Is Nothing Then
Application.Wait DateAdd("s", 1, Now)
GoTo OpenLoop
Else
End If
因为您再也不会尝试Set TestWorkbook
。
所以最好使用这样的东西:
Dim TestWorkbook As Workbook
Set TestWorkbook = Nothing
Do
On Error Resume Next
Set TestWorkbook = Workbooks("export.csv")
On Error Goto 0 'always re-activate error reporting!!!
' you can add a wait here but it's not necessarily needed.
DoEvents 'keep Excel responsive (in case of endless loop)
Loop While TestWorkbook Is Nothing
请注意,此循环将一直运行,直到export.csv
打开为止。如果它永远不会打开,它将永远运行。因此,可能您想插入时间标准以在一段时间后取消循环,例如。 1分钟。
请注意,Application.Wait DateAdd("s", 1, Now)
不一定是必需的。循环将重新尝试找到工作簿,直到它存在为止,即使没有等待也是如此。