有没有办法在Excel宏中运行异步方法?

时间:2014-09-28 15:43:48

标签: excel excel-vba qtp hp-uft vba

我在运行excel宏时遇到问题,因为它导致我的UI冻结。

请考虑以下代码:

Call Run_Test()

Sub Run_Test()

Set oQTP= CreateObject("Quicktest.Application")

oQTP.Open "<Test Path>"
oQTP.Run"<Test Path>"

End Sub

这里的问题是运行上面的Run_Test方法&#34; oQTP.Run&#34;需要一些时间才能完成,在此期间如果点击Excel工作表,UI就会冻结。

那么有什么方法可以异步运行这个方法并防止excel冻结?

或者还有其他技术可以阻止这种情况吗?

2 个答案:

答案 0 :(得分:3)

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

但是,VBA调用的函数库可以提供异步调用。经典ADO提供了将查询调用指定为异步的选项,在调用完成时(成功或不成功)引发事件。

如果您需要自定义代码以异步方式运行,则必须在提供此类支持的环境(例如C#或VB.NET)中对其进行编码,并调用生成的程序集。

答案 1 :(得分:2)

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

请参阅this answer for further details