如何更新作为进度条的用户表单?

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

我正在尝试更新用户表单Updating(本质上是一个进度条)。

第一次调用用户窗体时,它不会更新,而第二次它仅更新标签说明,而不是条的宽度。

Sub UpdateUpdatingUF(filenum As Integer, filecount As Integer)
    Dim filenumdbl As Double
    Dim filecountdbl As Double
    Dim boxwidth As Integer
    Dim barwidth As Integer
    Dim boxwidthdbl As Double
    filenumdbl = CDbl(filenum)
    filecountdbl = CDbl(filecount)
    boxwidthdbl = CDbl(boxwidth)
    boxwidth = 300
    barwidth = CInt(boxwidthdbl * filenumdbl / filecountdbl)
    With Updating
        .Label3.Caption = "Running file: " & CStr(filenum) & " / " & CStr(filecount)
        .ProgressBar.Width = barwidth
    End With
End Sub

我可能声明了太多变量,但我试图确保这不是原因。

我正在按照以下步骤进行测试。

Sub TestUpdate()
    Updating.Show
    Call UpdateUpdatingUF(3, 7)
    DoEvents
    Updating.Repaint
End Sub
excel vba userform
2个回答
2
投票

替换

Updating.Show

with

Updating.Show vbModeless

0
投票

太晚了,但是:

boxwidthdbl = CDbl(boxwidth) boxwidth = 300

这两行应该以相反的顺序:

boxwidth = 300
boxwidthdbl = CDbl(boxwidth)

因为您使用的是尚未初始化的变量。]​​>

如果您想在其他操作期间进行更新(例如在do / while或for / next循环内),建议的解决方案是正确的。 vbModeless指示程序不要等待表单关闭。通过此操作和DoEvents指令,可以在显示表单时进行更新。

如果仅需要一次更新,则还应该撤消值的更新和表格的显示:

Call UpdateUpdatingUF(3, 7)
Updating.Show

->这就是为什么您必须进行两次测试才能看到结果的原因(在更新值之前显示了表单,并且必须关闭它才能更新值)。

像这样,不再需要doevents和重绘。

为了确保出于测试目的需要卸载表格,请使用Unload Updating

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