【问题标题】:VBA Excel Progress Bar Form doesnt Update. Can I slow down processing?VBA Excel 进度条表单不更新。我可以减慢处理速度吗?
【发布时间】:2018-07-20 00:44:33
【问题描述】:

我有一个从服务器加载数据大约需要 2-4 分钟的工作簿,我想实现一个用户窗体进度条。我找到了许多关于如何创建这些进度条的很棒的网站。我已经创建了一个,当我在调试模式下单步执行程序并在条形大小增加之前中断时,它可以工作,但是当我在不添加调试中断的情况下运行它时,进度条开始更新,但它最终陷入困境并且不再进行屏幕更新发生在工作簿上的任何位置,直到完成加载。

我已将屏幕更新作为工作簿加载时的第一行。每次进度条宽度增加后我都有做事件。我将进度条表单打开为无模式。但是,工作簿似乎仍然因数据处理而超频,并且失去了对工作簿的关注并使其进入睡眠状态(没有屏幕更新,鼠标指针处于沙漏模式)。

在我发布一些代码之前,我想知道是否可以添加任何快速命令来减慢数据的处理速度,或者可能导致进度条用户表单等待一两秒钟以使其“赶上” '?

谢谢!

【问题讨论】:

  • 很好的页面,谢谢!

标签: vba excel progress-bar userform


【解决方案1】:

这通常对我有用(注意 .Repaint):

Public Sub updateProgressBar(ByVal whatPercent As Double, ByVal slowIt As Integer)
Dim outputPercentage As Integer, newWidth As Integer

If whatPercent > 1 Then whatPercent = 1
outputPercentage = CInt(whatPercent * 100)
newWidth = CInt(whatPercent * maxWidthBar)
With ProgressBar
    .LabelProgress.Width = newWidth: .LabelProgress.Caption = outputPercentage & "%": .Repaint
End With
delay slowIt

End Sub


'To create a delay
Public Sub delay(ByVal sec As Integer)
Dim strT As String, strSecsDelay As String

strT = Mid(CStr(100 + sec), 2, 2)
strSecsDelay = "00:00:" & strT
Application.Wait (Now + TimeValue(strSecsDelay))

End Sub

【讨论】:

  • 重绘方法是我所需要的。谢谢!
  • @St.吉米,太棒了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
相关资源
最近更新 更多