每次刷新数据透视图时,它都会丢失其格式。因此,我编写了一段 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