我使用pywin32在Python中创建了自定义对象。 虽然调用该对象需要一些时间。 以下是我尝试使应用程序统计异步,以便在宏运行时应用程序不会freez。
Sub demo()
demofunction
End Sub
Function demofunction()
Dim demoobj As Object
Do While demoobj Is Nothing
DoEvents
Set demoobj = CreateObject("Python.DemoObj")
Loop
Debug.Print demoobj.Hello
End Function
显然,代码在异步运行方面不起作用。这有甚么可能吗?
上面的代码可以正常工作,同时冻结应用程序一段时间。
答案 0 :(得分:1)
Vba是单线程的,但你可以发挥一些技巧使它看起来像多线程,在所有上升的星形网络服务器Node.js服务于一个线程之后,但给人以多线程的印象。
1)因此,您可以将一些Python组件放在Web服务器后面,然后异步使用MSXML2.XMLHTTP60
。 Private WithEvents oXHR As MSXML2.XMLHTTP60
在这里派上用场。 (注意,您需要将其声明为类的成员以使用WithEvents
)
2)你可以向一个进程(它给你另一个线程)进行shell并以这种方式调用Python组件,然后使用一些Windows API调用来定期检查进程是否已经完成。