VBA-VBA运行时无法打开工作表

时间:2018-11-16 11:58:32

标签: excel vba excel-vba

我在运行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上打开文件,如下所示:

enter image description here

如果代码在此处结束,则将在VBA完成后成功打开。 现在,它只是陷入循环,因为VBA忙于阻止文件打开。

问题:我需要一个允许文件打开的解决方案,以便VBA可以继续并在下载的文件夹上工作。

任何帮助将不胜感激,谢谢您。

1 个答案:

答案 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)不一定是必需的。循环将重新尝试找到工作簿,直到它存在为止,即使没有等待也是如此。