我有一个 Excel 2007 工作簿,其中一张工作表上有多个图表(堆叠条形图和一个系列作为总计的(不可见)线)。根据用户选择的单元格,条形图是否应该有连接器。
为此,我有一个小型 VBa 例程,由Worksheet_Change
循环遍历图表的事件触发,并分别使用objChart.SetElement msoElementLineSeriesLine
或设置连接器objChart.SetElement msoElementLineNone
。
这通常在 90% 的情况下有效。但是,有时 - 在一些不同的图表上,objChart.SetElement
会导致错误 -2147467259 The specified dimension is not valid for the current chart type.
- 并破坏图表,因此它看起来像这样:
错误发生后修复此问题的方法是重新打开文件 - 即使是在错误发生后保存的。因此,这似乎是某种显示问题。
答案1
我认为 SetElement msoElementLineSeriesLine 不像旧语法 ChartGroups(i).HasSeriesLines 那样强大
msoElementLineSeriesLine 似乎无法理解图表组、轴组等。如果它注意到的第一个系列不是堆叠条形图或柱形图,它可能会卡住。
Sub AddSeriesLines()
Dim cg As ChartGroup
For Each cg In ActiveChart.ChartGroups
Select Case cg.SeriesCollection(1).ChartType
Case xlColumnStacked, xlColumnStacked100, xlBarStacked, xlBarStacked100
cg.HasSeriesLines = True ' False to remove
End Select
Next
End Sub
有趣的是,2007/2010 的图表引擎重新设计仍然有在用户界面中添加系列线的方法,但我在 2013 年找不到它(尽管正如我所说,上面的代码运行良好)。