在Excel中使用ScreenUpdating和加载栏

时间:2017-02-03 13:15:25

标签: excel vba excel-vba

我正在运行大量代码来创建一些报告。

要查看报告创建的进度,我想在控制表上显示一个加载栏。

因此,我使用条件格式在单元格中创建加载栏。当报告(=工作表)完成计算时,加载条已达到100%(完整)。

我现在遇到的问题是更新这些加载条。

运行我的代码时,会执行不同的宏。加载条适用于4-5个宏,之后屏幕冻结,直到所有宏完成。这里的问题在哪里?

进度条的填充由另一个宏打开,该宏打开屏幕更新,在工作表上设置新的进度值并关闭屏幕更新。

2 个答案:

答案 0 :(得分:2)

我最近在其中一个文件中添加了进度指示器表单。

我创建了一个UserForm,在该框架内添加了一个框架和一个标签,还有一些其他标签,我可以稍后用特定内容更新。

enter image description here

我在开始时加载用户窗体,并传递已完成的%以及我希望标签对此说明的内容

Public Sub ProgressUpdate(ByVal dCalc As Double, ByVal Process As String)
  With ProgIndi
    If .Visible Then
      .Process.Caption = Process & "..."
      .PercentCompleted.Caption = Int(dCalc * 100) & "% Completed." 
      .Bar.Width = dCalc * 200                                      
      DoEvents                                                      
    End If
  End With
End Sub

在宏的末尾,卸载表单。您可以将ScreenUpdating保留为False,表单仍然会更新。

答案 1 :(得分:0)

将DoEvents放入循环中,以便Excel“抓住”任何操作

将.Repaint放入你的表单循环中,以便表单本身更新