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

如果不存在“限制”系列,我该如何让 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

相关内容