在VBA中循环ProgressBar Loader

时间:2017-08-15 03:05:17

标签: vba excel-vba progress-bar excel

我有一些vba代码需要很长时间才能在excel中运行,我试图添加进度条或某种类型的等待屏幕,以便更好地向用户显示代码仍在正常运行。我意识到ProgressBar只能在特定类型的代码中显示真正的进展,我不相信我的代码会适用。

然而,我想知道是否有方法让ProgressBar只是循环,一旦它已满,它从头开始,直到我的代码完成;以类似的方式插入手机时的充电图标。因此,一旦激活我的代码,UserForm1将弹出并显示重复的ProgressBar,并在完成我的代码后,UserForm将卸载。

任何建议都会有所帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

enter image description here

我在用户表单上使用以下内容作为进度条。它由一个框架内的标签组成;在开始时标签的宽度为零,然后它变宽以在100%完成时填充框架。标签没有文本,但它设置了BackColor属性作为条形。框架右侧有第二个progressText标签。要调用此函数,请使用i = i + 1pctCompl = 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