.SetElement の後にチャートが破損します。「指定されたディメンションは、現在のチャートの種類では無効です。」

.SetElement の後にチャートが破損します。「指定されたディメンションは、現在のチャートの種類では無効です。」

1 つのワークシートに複数のグラフ (積み上げ棒グラフと、合計を表す (非表示の) 線としての 1 つの系列) を含む Excel 2007 ワークブックがあります。ユーザーが選択したセルに応じて、棒グラフにコネクタが付くかどうかが決まります。

Worksheet_Changeこのため、私は、チャートをループし、それぞれまたはを使用してコネクタを設定するイベントobjChart.SetElement msoElementLineSeriesLineによってトリガーされる小さな VBa ルーチンを用意しています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 ではそれを見つけることができません (ただし、前述したように、上記のコードは正常に動作します)。

関連情報