我在我的同事写的另一个工作簿中调用了一个调用宏的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进入睡眠状态,并且只有在生成新工作簿时才继续使用下一行代码。或者,如果还有其他解决方法吗?
答案 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