我有一些vba代码需要很长时间才能在excel中运行,我试图添加进度条或某种类型的等待屏幕,以便更好地向用户显示代码仍在正常运行。我意识到ProgressBar只能在特定类型的代码中显示真正的进展,我不相信我的代码会适用。
然而,我想知道是否有方法让ProgressBar只是循环,一旦它已满,它从头开始,直到我的代码完成;以类似的方式插入手机时的充电图标。因此,一旦激活我的代码,UserForm1将弹出并显示重复的ProgressBar,并在完成我的代码后,UserForm将卸载。
任何建议都会有所帮助。
谢谢!
答案 0 :(得分:0)
我在用户表单上使用以下内容作为进度条。它由一个框架内的标签组成;在开始时标签的宽度为零,然后它变宽以在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