我正在尝试更新用户表单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
with
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和重绘。
为了确保出于测试目的需要卸载表格,请使用Unload Updating
。