如何在vba中进行异步函数调用

时间:2017-02-04 05:17:11

标签: vba word-vba

我使用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

显然,代码在异步运行方面不起作用。这有甚么可能吗?

上面的代码可以正常工作,同时冻结应用程序一段时间。

1 个答案:

答案 0 :(得分:1)

Vba是单线程的,但你可以发挥一些技巧使它看起来像多线程,在所有上升的星形网络服务器Node.js服务于一个线程之后,但给人以多线程的印象。

1)因此,您可以将一些Python组件放在Web服务器后面,然后异步使用MSXML2.XMLHTTP60Private WithEvents oXHR As MSXML2.XMLHTTP60在这里派上用场。 (注意,您需要将其声明为类的成员以使用WithEvents

2)你可以向一个进程(它给你另一个线程)进行shell并以这种方式调用Python组件,然后使用一些Windows API调用来定期检查进程是否已经完成。