![.SetElement‘指定的尺寸对于当前图表类型无效’之后图表损坏。](https://linux22.com/image/1346281/.SetElement%E2%80%98%E6%8C%87%E5%AE%9A%E7%9A%84%E5%B0%BA%E5%AF%B8%E5%AF%B9%E4%BA%8E%E5%BD%93%E5%89%8D%E5%9B%BE%E8%A1%A8%E7%B1%BB%E5%9E%8B%E6%97%A0%E6%95%88%E2%80%99%E4%B9%8B%E5%90%8E%E5%9B%BE%E8%A1%A8%E6%8D%9F%E5%9D%8F%E3%80%82.png)
我有一个 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 年找不到它(尽管正如我所说,上面的代码运行良好)。