VBA Excel 进度条表单未更新。我可以放慢处理速度吗?
VBA Excel Progress Bar Form doesnt Update. Can I slow down processing?
我有一个工作簿,从服务器加载数据大约需要 2-4 分钟,我想实现一个用户窗体进度条。我找到了很多关于如何创建这些进度条的很棒的网站。我创建了一个当我在调试模式下单步执行程序并在条形大小增加之前中断时工作的方法,但是当我 运行 它没有添加调试中断时进度条开始更新但它最终陷入困境并且在完成加载之前,工作簿上的任何地方都不会再发生屏幕更新。
我已将屏幕更新作为工作簿加载时的第一行。每次进度条宽度增加后我都会执行事件。我以无模式方式打开进度条窗体。但工作簿似乎仍然随着数据处理而超频,失去对工作簿的关注,有点让它进入睡眠状态(没有屏幕更新,鼠标指针处于沙漏模式)。
在我 post 一些代码之前,我想知道是否可以添加任何快速命令来减慢数据处理速度,或者可能导致进度条用户表单等待一两秒钟让它 'catch up'?
谢谢!
这通常对我有用(注意 .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
我有一个工作簿,从服务器加载数据大约需要 2-4 分钟,我想实现一个用户窗体进度条。我找到了很多关于如何创建这些进度条的很棒的网站。我创建了一个当我在调试模式下单步执行程序并在条形大小增加之前中断时工作的方法,但是当我 运行 它没有添加调试中断时进度条开始更新但它最终陷入困境并且在完成加载之前,工作簿上的任何地方都不会再发生屏幕更新。
我已将屏幕更新作为工作簿加载时的第一行。每次进度条宽度增加后我都会执行事件。我以无模式方式打开进度条窗体。但工作簿似乎仍然随着数据处理而超频,失去对工作簿的关注,有点让它进入睡眠状态(没有屏幕更新,鼠标指针处于沙漏模式)。
在我 post 一些代码之前,我想知道是否可以添加任何快速命令来减慢数据处理速度,或者可能导致进度条用户表单等待一两秒钟让它 'catch up'?
谢谢!
这通常对我有用(注意 .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