如何更新作为进度条的用户窗体?

How to update a userform that is a progress bar?

我正在尝试更新我的用户表单 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

替换

Updating.Show

Updating.Show vbModeless

为时已晚但是:

boxwidthdbl = CDbl(boxwidth) boxwidth = 300

这两行的顺序应该相反:

boxwidth = 300
boxwidthdbl = CDbl(boxwidth)

因为您使用的是一个尚未初始化的变量。

如果您想在另一个操作期间更新(例如在 do/while 或 for/next 循环内),建议的解决方案是正确的。 vbModeless 指示程序不要等待窗体关闭。多亏了那个和 DoEvents 指令,在显示表单时进行更新。

如果只需要更新一次,还应该将值的更新和表格的显示反向:

Call UpdateUpdatingUF(3, 7)
Updating.Show

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

这样,就不需要doevents和repaint了

为了确保卸载表单,如果需要进行测试,请使用Unload Updating