Userform未正确更新

时间:2015-08-03 10:23:30

标签: excel-vba userform vba excel

我正在尝试更新我的用户格式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

我知道我可能会宣布太多变数,但我正在努力确保这不是原因。

2 个答案:

答案 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