数据更新时暂停Excel图表

我有大量的数据,通过在Excel中通过连接从SQL查询中按下button。 然后我撰写几个简单的计算来获得结果。 我也有4个基于这些数据的图表。

我遇到了一个代码需要几分钟才能执行的问题。 我相信这是因为在更新数据的同时,graphics也被更新。 删除图表后,我得出了这个结论,它显着更快。

有没有办法加快这个过程呢? 我可以暂停图表并在所有数据更新后恢复?

谢谢!

你有没有考虑在vba中抵消图表区域,并在代码的末尾切回?

以下是如何在VBA中select图表区域 。

例如。 如果要在范围A1:A10中绘制数据,则可以执行以下操作

Charts(1).SetSourceData Source:=Sheets(1).Range("B1:B10")

 your logic 

Charts(1).SetSourceData Source:=Sheets(1).Range("A1:A10")

这个“目标”在不同的范围图表,以便它不会尝试重新计算每个单元格更改后的graphics。 一旦你的逻辑完成,然后“瞄准”回到正确的范围。

我build议使用

 Application.Calculation = xlCalculationManual Application.ScreenUpdating = False 

也许也是

 Application.EnableEvents = False 

在查询之前,并在查询之后倒转它

 Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Application.EnableEvents = True 

我做的方式是在开始时清除所有图表中的所有系列。 格式保持不变每个graph.I创build一个子,我在主要程序中调用我发送每个图表variables名称声明为ListObject并分配图表名称。

 Private Sub DeleteOldData(CurrentChart As ChartObject) Dim s As Long With CurrentChart For s = .Chart.SeriesCollection.Count To 1 Step -1 .Chart.SeriesCollection(s).Delete Next s End With End Sub 

然后,我更新数据。 之后,我再通过另一个子分配所有系列的图表。

 Private Sub AddData(CurrentChart As ChartObject, table1 As ListObject, table2 As ListObject, series1 As String, series2 As String) CurrentChart.Chart.SeriesCollection.NewSeries CurrentChart.Chart.FullSeriesCollection(1).Name = series1 CurrentChart.Chart.FullSeriesCollection(1).Values = table1.ListColumns(2).DataBodyRange CurrentChart.Chart.FullSeriesCollection(1).XValues = table1.ListColumns(1).DataBodyRange CurrentChart.Chart.SeriesCollection.NewSeries CurrentChart.Chart.FullSeriesCollection(2).Name = series2 CurrentChart.Chart.FullSeriesCollection(2).Values = table2.ListColumns(2).DataBodyRange CurrentChart.Chart.FullSeriesCollection(2).XValues = table2.ListColumns(1).DataBodyRange CurrentChart.Chart.FullSeriesCollection(2).Select DoEvents End Sub 

table1和table2是我拉数据的表格。 我不得不在两个不同的表格的1个图表上添加2个图表。 Series1和Series2是该系列的名称。 我打电话给他们之前,我宣布他们。