Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何更新作为进度条的用户表单?_Excel_Vba_Userform - Fatal编程技术网

Excel 如何更新作为进度条的用户表单?

Excel 如何更新作为进度条的用户表单?,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

我正在尝试更新我的userform
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