VBA 卡在 DoEvents - OfficeJS 画布插件中

问题描述 投票:0回答:1

我正在尝试维护一个使用 AnalystCave 的 ProgressBar

的旧工具

正在运行的代码是示例:

Sub ExampleProgressBar()
    Dim pb As ProgressBar
    Set pb = New ProgressBar
    pb.Initialize "My title", 100
    'Add 10% progress
    pb.AddProgress 10
    '...
    'Hide and remove the Progress Bar
    pb.Hide
    Set pb = Nothing
End Sub

尽管 VBA 实际上并没有冻结,但该代码永远不会停止。当我进入 VBA 开发工具并点击暂停时,很明显它正在处理下面的 DoEvents:

Public Sub AddProgress(Optional inc As Long = 1)
'Increase progress by an increment
    Dim tl As Double, tlMin As Long, tlSec As Long, tlHour As Long, tlTotal As Long, tlTotalSec, tlTotalMin, tlTotalHour
    progress = progress + inc
    If progress > maxProgress Then progress = maxProgress
    lBar.Width = CLng(CDbl(progress) / maxProgress * maxWidth)
                '        #################################################
    DoEvents    '<<<<<<< ########### VBA Can't get passed here ###########
                '        #################################################
    tl = Time - startTime
    tlSec = Second(tl) + Minute(tl) * 60 + Hour(tl) * 3600
    tlTotal = tlSec
    If progress = 0 Then
        tlSec = 0
    Else
        tlSec = (tlSec / progress) * (maxProgress - progress)
    End If
    ...
End Sub

为什么会出现这种情况?

vba office-js
1个回答
0
投票

我尝试的第一件事是重新编译整个工作簿(删除所有 vba 模块,保存并重新导入所有模块)。这并没有削减它。

事实证明我的场景非常具体。我大约 6 年前开发了这个工具,之前它有一个 OfficeJS 画布插件,可以显示用户在地理空间地图上选择的位置。此后,由于 IT 安全等原因,该加载项已变得无法访问。因此,以下加载项错误已经存在了一段时间,但之前并未影响工作簿的操作。

完全删除画布插件并保存后,DoEvents 终于完成了。我假设 Microsoft Office 团队最近更改了有关 OfficeJS Canvas 错误的一些内容,这导致

Application.DoEvents
永远“冻结”(加载项必须始终生成事件......也许是轮询?)

最终,如果将来有人遇到同样的问题,请考虑删除 OfficeJS 画布加载项,看看是否可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.