这是我第一次在Outlook中使用VBA,所以请耐心等待我
我已经创建了一个基本的宏,可以对文件夹执行各种操作。由于这需要一段时间,我决定建立一个状态窗口,说明它目前在做什么。我只是用这个
继续设置一个标签的值Function UpdateStatus(Message As String)
StatusForm.StatusUpdate.Caption = Message
StatusForm.Repaint
End Function
问题是它运行一段时间(5-15秒)之后窗口和其余的outlook锁定;表单不再更新,并在其窗口标题中有“(无响应)”。
我觉得我在某种程度上已经死了锁定UI线程,但我对如何解决它感到茫然。评论重绘不奇怪不会让它更新,但除此之外我不知道在哪里看
有什么建议吗?
答案 0 :(得分:4)
尝试在计算密集型循环中添加DoEvents
。这会产生UI线程的执行代码,这样当你在后台进行计算密集的事情时,其他事情就可以完成。 Office是单线程的,因此您可以在运行宏时阻止UI。
样品:
Sub LockUI()
Dim x
x = Timer
Do While Timer - x < 5
'Blocks the UI for 5 seconds
Loop
End Sub
Sub LockUI2()
Dim x
x = Timer
Do While Timer - x < 5
'Doesn't block the UI
DoEvents
Loop
End Sub