gpt4 book ai didi

vba - DoEvents 不执行事件...为什么?

转载 作者:行者123 更新时间:2023-12-02 04:01:27 25 4
gpt4 key购买 nike

我使用 DoEvents 强制更新状态栏(或工作表中的某些单元格)中的进度指示器,如下面的示例代码所示。但屏幕不刷新,或在某个时刻停止刷新。任务最终完成,但进度条没用。

为什么 DoEvents 不“执行事件”?我还能做什么来强制屏幕更新?

编辑:我在 Windows XP 上使用 Excel 2003。

这是 earlier question 的后续内容;感谢Robert Mearns获取他的答案和下面的示例代码。

Sub ProgressMeter()

Dim booStatusBarState As Boolean
Dim iMax As Integer
Dim i As Integer

iMax = 100

Application.ScreenUpdating = False
''//Turn off screen updating

booStatusBarState = Application.DisplayStatusBar
''//Get the statusbar display setting

Application.DisplayStatusBar = True
''//Make sure that the statusbar is visible

For i = 1 To iMax ''// imax is usually 30 or so
fractionDone = CDbl(i) / CDbl(iMax)
Application.StatusBar = Format(fractionDone, "0%") & " done..."
''// or, alternatively:
''// statusRange.value = Format(fractionDone, "0%") & " done..."

''// Some code.......

DoEvents
''//Yield Control

Next i

Application.DisplayStatusBar = booStatusBarState
''//Reset Status bar display setting

Application.StatusBar = False
''//Return control of the Status bar to Excel

Application.ScreenUpdating = True
''//Turn on screen updating

End Sub

最佳答案

我发现 DoEvents 并不总是完全可靠。我建议尝试两种不同的事情。

首先,尝试在状态栏更新之后立即调用 DoEvents(即在 Some code .... 行之前)。

如果这不起作用,我发现在某些情况下使用 sleep API 是获得处理器时间的更可靠方法。如果 DoEvents 没有按我希望的方式工作,这通常是我尝试的第一件事。您需要在模块顶部(在函数之外)添加以下行:

    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

然后添加此行来代替 DoEvents 或作为其补充:

    Sleep 1   'This will pause execution of your program for 1 ms

如果 1 毫秒不起作用,您可以尝试增加使用 sleep 暂停程序的时间长度。

关于vba - DoEvents 不执行事件...为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3863641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com