有没有办法在Excelmacros中运行asynchronous方法?

我在运行excelmacros时遇到了麻烦,因为它导致我的UI冻结。

考虑下面的代码:

Call Run_Test() Sub Run_Test() Set oQTP= CreateObject("Quicktest.Application") oQTP.Open "<Test Path>" oQTP.Run"<Test Path>" End Sub 

这里的问题是,当运行上面的Run_Test方法“oQTP.Run”需要一些时间来完成,在这段时间,如果单击Excel表单的UI冻结。

那么有什么办法可以asynchronous运行这个方法,并防止Excel冻结?

或者还有其他的技术来防止这种情况发生吗?

VBA本身不提供对asynchronous编程的支持。 程序员必须在嵌套循环内显式调用DoEvents以允许处理Windows消息队列。

但是,VBA调用的函数库可能会提供asynchronous调用。 传统的ADO通过提供将查询调用指定为asynchronous的选项,在调用完成(成功或失败)时引发一个事件。

如果您需要自定义代码asynchronous运行,则必须在提供此类支持的环境(如C#或VB.NET)中编写代码,然后调用生成的程序集。

如果你的问题是关于asynchronous运行QTP,你可以指定False作为Run方法的WaitOnReturn参数。

看到这个答案进一步的细节 。