我用一個用戶窗體上的進度條下面。它由框架內的標籤組成;在開始時,標籤的寬度爲零,然後加寬,以100%完成填充框架。該標籤沒有文字,但它有一個BackColor屬性設置爲條形。框架右側還有第二個progressText標籤。要調用此函數,請使用如i = i + 1
和pctCompl = 100 * i/iTotalNum
這樣的循環,然後將其包含在循環中:progress pctCompl, "listing files"
,並且完成後,使進度條不可見:progress -1
。您隨時可以使用pctCompl = 0
將其重置爲0。
Sub progress(pctCompl As Integer, Optional msg As String)
Dim increment As Double, i As Integer
If pctCompl < 0 Then
If progressBar.Width < 0.9 * progressFrame.Width Then
progressBar.Width = progressFrame.Width
Application.Wait (Now + TimeValue("0:00:01"))
End If
progressText.Visible = False
progressFrame.Visible = False
Exit Sub
Else
progressText.Visible = True
progressFrame.Visible = True
End If
progressText.Caption = pctCompl & "% " & msg
progressBar.Width = progressFrame.Width * pctCompl/100
DoEvents
End Sub
Private Sub UserForm_Activate()
progressFrame.Visible = False
progressText.Visible = False
end Sub
而不是等待,您可以doevents,或label.zorder 0,或將標籤放在一個相同大小的框架和frame.repaint中。也可以使用double而不是整數,因爲vba不會對四捨五入數字和max'es感到困惑(如果你沒有試試?1000 * 1000左右,在即時窗口中,小數字,但你會發生溢出錯誤)。爲了避免代碼變慢,我經常使用如果我mod 3 = 0然後affProgress,例如,但你可以改變值3來相應地調整它。 –