Excel – 屏幕更新的屏幕闪烁

我还有另外一个问题,就是“阻止闪烁的Excel画面”,但是我觉得这个比较棘手。

我有一个客户在macros执行过程中需要在他的电子表格上有一个“进度”栏。 我做了什么,是我有一个饼图链接到2个单元格,我根据进度调整。 为了performance,我已经禁用eventsScreenUpdating并将calculation to manual更改calculation to manual

然后,偶尔我会快速切换ScreenUpdating on and off ,实际更新进度表。 每当我使用它时,它就像一个魅力(现在有30多个项目)。

最近,客户回来给我一个“大”的问题。 每当我做快速切换刷新进度图表时,整个excel屏幕(包括其上的所有项目)闪烁,这使得这个人疯狂。

有没有人有任何想法可以做到这一点,以保持图表更新,同时保持头版不断显示(macros之间跳转页面)没有屏幕闪烁? 像双缓冲或如此…

相信与否,但我只是find了解决办法。 这太容易了。 在VBA中,可以刷新一个特定的对象,而剩下的屏幕保持“locking”状态。 例如:

 ThisWorkbook.Worksheets("Welcome").ChartObjects(1).Chart.Refresh 

谢谢大家的意见。

您可以重新编写macros,使其不会“在页面之间跳转”(因为通常不需要activate工作表来操作数据,否则用户窗体或应用程序的StatusBar可以用来显示进度条:

 Sub StatusBar() Dim pct As Double Dim msg as String Application.ScreenUpdating = False For i = 10000 To 1 Step -1 pct = (10000 - i) / 10000 msg = Format(pct, "0.0%") & " complete" Application.StatusBar = msg Next Application.StatusBar = False Application.ScreenUpdating = True End Sub 

这是UserForm的修改示例。 请注意,您需要添加UserForm模块,并至less添加一个标签才能显示信息:

 Sub StatusBar() Dim pct As Variant DoEvents UserForm1.Show vbModeless Application.ScreenUpdating = False For i = 10000 To 1 Step -1 pct = (10000 - i) / 10000 If Int((i / 10000) * 100) = (i / 10000) * 100 Then msg = Format(pct, "0%") UserForm1.Label1 = msg & " complete" End If Next UserForm1.Label1 = "Finished!" Application.ScreenUpdating = True End Sub 

问题可能在于,根据您的macros执行的速度,进度指示器可能会从0跳到100%。 你也可以做graphics化的进度条,但是它背后的基本思想是一样的,只是不是更新标签值,而是改变具有不同背景色的文本框的大小等等。

根据OP评论修改

这就是你如何“复制”范围从一张纸到另一张没有“复制/粘贴”:

 Set rng1 = Sheets(1).Rows(12) Set rng2 = Sheets(2).Rows(1) rng2.Value = rng1.Value 

所以,你可以定义你的范围,并将第二个范围赋值为=第一个范围。