您当前在 while 循环中旋转的方法不是一个好主意,因为它消耗了所有可用资源来做......什么都不做。cells(10,1)<>"result"
或者更确切地说,它会尽可能快地一遍又一遍地执行比较。同时用户界面挂起。
简而言之,您会发现 VBA 不适合异步或多线程编程。
值得庆幸的是,Excel 确实为您提供了一种内置的方法来完成此任务,只需付出一点努力:Application.OnTime 方法。它允许您安排对方法的延迟调用,同时保持 UI(和任何其他 VBA 代码)响应并可用。您可以使用它来实现一种计时器。
这是您的案例的基本方法。它每 1 秒检查一次测试单元的值。如果值没有改变,它会安排自己在另一秒钟内再次检查。如果值为“结果”,它会调用另一个子程序,您可以在其中放置代码来处理结果。
Public Sub CallRemoteFunc()
Application.Calculation = xlManual
Cells(1, 1) = "some remotefunction"
Application.Calculate
Call WaitForUpdate
End Sub
Public Sub WaitForUpdate()
If Cells(10, 1) <> "result" Then
Debug.Print "Still waiting"
Application.OnTime Now + TimeValue("00:00:01"), WaitForUpdate
Else
Call DoStuffWithData
End If
End Sub