【问题标题】:vba Word - statusbar is flickering due to calculationsvba Word - 由于计算,状态栏闪烁
【发布时间】:2021-01-04 19:49:32
【问题描述】:

我想在 Word 中进行长时间计算时使用状态栏来更新信息。但是,状态栏会在计算过程中闪烁并切换回“正常”状态栏。

例子:

Sub main()
    Dim i As Integer
    Dim j As Long
    Dim dummy As Double
    
    For i = 1 To 100
        Application.StatusBar = "Please be patient... i=" & i
        ' waiting loop: Flickering due to calculations
        For j = 1 To 90000
            dummy = Sqr(j) ^ 3
            dummy = Sqr(dummy)
        Next
        ' just waiting: (almost) No flickering
        'CreateObject("Excel.Application").Wait (Now + TimeValue("00:00:01"))
    Next
    Application.StatusBar = False
End Sub

如果您用推荐的 CreateObject... 更改 等待循环,则闪烁几乎消失了。我也试过 Application.ScreenUpdating 但它不起作用。

如何在计算过程中停止闪烁?

【问题讨论】:

    标签: vba ms-word statusbar flicker


    【解决方案1】:

    状态栏正在闪烁,因为您已将其更新包含在循环中。实际上,它会在每次迭代时重新绘制自己。

    将其移出循环,然后显然不包括变量“i”。

    另一种解决方法是在循环中放置一个条件,检查计数器并仅在完成 ​​25%、完成 50% 和完成 75% 的时间范围内重新绘制状态栏。

    【讨论】:

    • 状态栏闪烁,因为它总是在中间显示“正常”状态栏,例如字数。状态必须在循环中更新。否则,更新对于长时间运行的计算没有意义。
    • @musbach 这就是为什么我建议限制更新状态栏消息的次数。而不是每次迭代,在这个过程中可能只更新 4 到 6 次。
    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多