如何更新作为进度条的用户窗体?
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
。
我正在尝试更新我的用户表单 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
。