.SetElement 之後圖表損壞“指定的維度對於當前圖表類型無效。”

.SetElement 之後圖表損壞“指定的維度對於當前圖表類型無效。”

我有一本 Excel 2007 工作簿,在一個工作表上有多個圖表(堆疊長條圖和一個作為總計(不可見)線的系列)。根據使用者選擇的儲存格,長條圖應該有連接器或沒有連接器。

為此,我有一個由Worksheet_Change循環圖表的事件觸發的小型 VBa 例程,並分別使用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 年找不到它(儘管正如我所說,上面的程式碼工作正常)。

相關內容