在继续下一行代码之前,我可以让VBA睡一会儿吗?

时间:2017-05-29 12:58:28

标签: python excel vba excel-vba

我在我的同事写的另一个工作簿中调用了一个调用宏的VBA代码片段。该宏实际上调用python做其他事情并创建一个新的工作簿。之后我需要打开那个新工作簿并做一些其他事情。但是,python代码需要一些时间才能运行,如果我只是使用

Application.Run "'CollegueWorkbook.xlsm'!pythonmacro"
Set wb = Workbooks.Open("NewWorkbook.xlsx")

我会在执行Run-time error '9': Subscript out of range时得到Set wb = Workbooks.Open("NewWorkbook.xlsx"),python代码还没有创建新的工作簿但我想(看起来VBA代码不会等待python线程)

我想知道如何让VBA进入睡眠状态,并且只有在生成新工作簿时才继续使用下一行代码。或者,如果还有其他解决方法吗?

3 个答案:

答案 0 :(得分:1)

暂停脚本有两种方法。

1)Application.Wait这是为了在规定时间继续。

2)Sleep这个用于暂停一段时间。

答案 1 :(得分:0)

您正在寻找Application.Wait 这将等到特定时间,因此如果您要等待10秒钟,请使用 Application.Wait Now + TimeValue("0:00:10") 你可以考虑一个循环,这样你就不必再等待更长时间了:

Dim retry As Long
Set wb = Nothing
For retry = 1 To 10
    Application.Wait Now + TimeValue("0:00:10")
    If Dir("NewWorkbook.xlsx") <> "" Then
        Set wb = Workbooks.Open("NewWorkbook.xlsx")
        Exit For
    End If
Next retry
If wb Is Nothing Then
    MsgBox "Didn't work..."
Else
    ...
End If

答案 2 :(得分:0)

一种方式可能是这样。 (未经测试)

On Error Resume Next
Application.Run "'CollegueWorkbook.xlsm'!pythonmacro"
Do While wb Is Nothing
    Set wb = Workbooks.Open("NewWorkbook.xlsx")
Loop