我正在尝试更新我的用户格式Updating
(这实际上是一个进度条)。它在第一次调用userform时没有进行更新,第二次只更新标签描述而不是条形宽度。我正在使用下面显示的TestUpdate
程序对其进行测试。
我做错了什么?
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
我知道我可能会宣布太多变数,但我正在努力确保这不是原因。
答案 0 :(得分:2)
替换
Updating.Show
与
Updating.Show vbModeless
答案 1 :(得分: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
。