随着时间的推移不断更新“状态表”锁

时间:2012-03-20 19:34:18

标签: vba outlook

这是我第一次在Outlook中使用VBA,所以请耐心等待我

我已经创建了一个基本的宏,可以对文件夹执行各种操作。由于这需要一段时间,我决定建立一个状态窗口,说明它目前在做什么。我只是用这个

继续设置一个标签的值
Function UpdateStatus(Message As String)
    StatusForm.StatusUpdate.Caption = Message
    StatusForm.Repaint
End Function

问题是它运行一段时间(5-15秒)之后窗口和其余的outlook锁定;表单不再更新,并在其窗口标题中有“(无响应)”。

我觉得我在某种程度上已经死了锁定UI线程,但我对如何解决它感到茫然。评论重绘不奇怪不会让它更新,但除此之外我不知道在哪里看

有什么建议吗?

1 个答案:

答案 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