【发布时间】:2017-10-04 12:05:25
【问题描述】:
我有一个将范围复制到某个单元格并将数据源更改为图表的代码。该图表具有组合图表类型,具有堆叠列和xlLineMarker 与最后一个系列(总计)。系列集合的数量根据用户选择(2个或更多)而有所不同。
它可以工作,但有时图表不会像所附图像那样完全更新(显示系列名称为“series1,series2,...”的空图表)。发生这种情况时,右键单击图表并单击选择数据,然后只需选择 series1 以外的任何系列即可更新图表。不刷新或重新分配数据源。只需在数据选择窗口中选择“series2”或其他,然后单击“取消”,我怀疑宏没有完全执行...,
我做错了吗?或者有什么方法可以完全更新图表?
Sub chtupdate()
Dim rng As Range
Dim i As Integer
Dim n As Integer
Set rng = Range("G37").CurrentRegion
ActiveSheet.ChartObjects("Chart1").Activate
With ActiveChart
.ChartArea.ClearContents
.SetSourceData Source:=rng, PlotBy:=xlRows
n = ActiveSheet.ChartObjects(1).Chart.SeriesCollection.Count
For i = 1 To n - 1
.SeriesCollection(i).ChartType = xlColumnStacked
Next i
.SeriesCollection(n).ChartType = xlLineMarkers
End With
End Sub
【问题讨论】:
-
“我怀疑宏没有完全执行” -- 你为什么不通过调试器来验证呢? atm 我想到的唯一建议是 1) 不是
Activate图表(不需要); 2) 在宏期间禁用屏幕更新; 3)由于您在With clause内,请将n = ActiveSheet.ChartObjects(1).Chart.SeriesCollection.Count替换为更简单的n = .SeriesCollection.Count -
@Danny Yun 在下面我的答案中尝试代码
-
感谢您的评论。我已经摆脱了激活图表。我确实有代码可以在下面的代码之间禁用和启用屏幕更新代码。我只是没有在这里添加。根据您的建议,我在调试器中使用了“Step In”。问题仍然存在。它起初有效,但第二次失败。我不确定为什么它有时会起作用而不起作用。并感谢有关“.SeriesCollection.Count”的提示。是的,它更干净。无论如何,问题仍然存在。
标签: excel charts datasource vba