Excel VBA: チャートシリーズが存在するかどうかを確認し、存在しない場合は続行します

Excel VBA: チャートシリーズが存在するかどうかを確認し、存在しない場合は続行します

ピボット チャートは更新されるたびに書式が失われます。そのため、ページが更新されるたびにグラフを再フォーマットする VBA コードを用意しました。

Private Sub Worksheet_Calculate()
    ActiveSheet.ChartObjects("Chart 3").Activate
    ActiveChart.FullSeriesCollection(1).ChartType = xlColumnStacked
    ActiveChart.FullSeriesCollection("Limit").ChartType = xlLine
    ActiveChart.Deselect
End Sub

グラフの種類はコンボで、「limit」と呼ばれる時系列を除くすべての時系列が積み重ねられます。上記のコードは、データ セットに「Limit」シリーズがある限り機能します。ユーザーがデータ セットから Limit 時系列を削除するフィルターまたはスライサーを選択した場合、Excel はエラーをスローします。

フォーマットをオプションにする必要があります。

シリーズが存在するかどうかテストしてみましたが、うまくいきませんでした。

Private Sub Worksheet_Calculate()
    ActiveSheet.ChartObjects("Chart 3").Activate
    ActiveChart.FullSeriesCollection(1).ChartType = xlColumnStacked

    If ActiveChart.FullSeriesCollection("Limit") Is Nothing Then "do nothing here"
    Else ActiveChart.FullSeriesCollection("Limit").ChartType = xlLine
    End If    

    ActiveChart.Deselect
End Sub

「limit」シリーズが存在しない場合に、VBA でそれをスキップするにはどうすればよいでしょうか?

答え1

一つの方法は、エラーを無視することです。エラー時声明:

Private Sub Worksheet_Calculate()
    On Error GoTo Finish
    Dim Nope As Integer
    ActiveSheet.ChartObjects("Chart 3").Activate
    ActiveChart.FullSeriesCollection(1).ChartType = xlColumnStacked
    ActiveChart.FullSeriesCollection("Limit").ChartType = xlLine
    ActiveChart.Deselect
Finish:
    On Error GoTo 0
End Sub

On Error GoTo 0すべてのエラー処理をキャンセルし、通常どおり処理するように指示します。

On Error Resume Next代わりに上部に を使用することもできますGoTo Finish:

Private Sub Worksheet_Calculate()
    On Error Resume Next
    Dim Nope As Integer
    ActiveSheet.ChartObjects("Chart 3").Activate
    ActiveChart.FullSeriesCollection(1).ChartType = xlColumnStacked
    ActiveChart.FullSeriesCollection("Limit").ChartType = xlLine
    ActiveChart.Deselect
End Sub

関連情報