【发布时间】:2010-08-09 13:25:20
【问题描述】:
我有一个 VBA 应用程序,它创建一个 COM 对象的实例,然后不断地轮询对象的 DataReady 属性以查看是否有新数据。当有新数据可用时,它会将数据粘贴到电子表格中。问题是这个宏(vba 子例程)不断运行,这会减慢 excel 的速度,并使计算机在进程运行时有些无法使用。有没有一种方法可以让我在单独的线程上启动这个进程,或者做一个 .NET 后台工作者之类的事情?
我的两次尝试是使用这样的 while 循环..
While(True)
If(myObject.DataReady)
Do some stuff here
End If
WEnd
然后是这个
Sub GrabNewPoint()
If (myModule.NewDataReady_Receiver = True) Then
Do some stuff here...
End If
If (StopTest = False) Then
NextTime = Now() + TimeValue("00:00:20")
Application.OnTime NextTime, "GrabNewPoint"
End If
第二次尝试肯定会更好,但它仍然会大大减慢速度。有没有更好的解决方案?
我的 COM 对象是我用 C# 编写的类库。当数据准备好时,我可以添加在类库中触发的事件,但是如何在 VBA 程序中监听这些事件?
【问题讨论】:
标签: excel vba long-running-processes