Excel 如何更新作为进度条的用户表单?
我正在尝试更新我的userformExcel 如何更新作为进度条的用户表单?,excel,vba,userform,Excel,Vba,Userform,我正在尝试更新我的userformupdate(它本质上是一个进度条) 第一次调用userform时它不会更新,第二次它只更新标签描述,而不更新条的宽度 Sub UpdateUpdatingUF(filenum As Integer, filecount As Integer) Dim filenumdbl As Double Dim filecountdbl As Double Dim boxwidth As Integer Dim barwidth As In
update
(它本质上是一个进度条)
第一次调用userform时它不会更新,第二次它只更新标签描述,而不更新条的宽度
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
与
为时已晚,但:
boxwidthdbl=CDbl(boxwidth)
boxwidth=300
这两行的顺序应相反:
boxwidth = 300
boxwidthdbl = CDbl(boxwidth)
因为您正在使用尚未初始化的变量
如果您希望在另一个操作期间(例如在do/while或for/next循环内)进行更新,则建议的解决方案是正确的vbModeless
指示程序不要等待窗体关闭。在显示表单时进行更新要归功于此和DoEvents
指令
如果只需要更新一次,还应反向更新值并显示表单:
Call UpdateUpdatingUF(3, 7)
Updating.Show
-->这就是为什么您必须测试两次才能看到结果(您在更新值之前显示表单,并且必须关闭表单才能更新值)
像这样,就不需要做更多的事和重新粉刷了
要确保卸载表单,如果出于测试目的需要,请使用
卸载更新您的意思是更新.Show VbModeless
或更新.Show(False)
?您可能需要添加一个关于为什么需要这样做的解释:)我收到错误446-“对象不支持命名参数”更新。show vbmodeless
可以更改文本,但如果我重新编写进度条,则该条不会更改。不完全确定它为什么起作用,但确实起了作用。
Call UpdateUpdatingUF(3, 7)
Updating.Show