检查趋势线是否存在于VBA中

我有一张带有图表的表格.我需要插入一个按钮来打开/关闭Trendline.首先,我需要检查趋势线是否存在.听起来很简单,但正在推动我坚果!

这是我用来创建trednline并对其进行格式化的代码:

Sub Trending() 

Sheets("Sheet1").ChartObjects(1).Activate
    ActiveChart.SeriesCollection(1).Trendlines.Add
    ActiveChart.SeriesCollection(1).Trendlines(1).Select
    With Selection
        .Type = xlPolynomial
        .Order = 3
        .Border.ColorIndex = 3
        .Border.Weight = xlMedium

    End With

End Sub

为了检查趋势线的存在,我试过:

If Sheets("Sheet 1").ChartObjects(1).SeriesCollections(1).Trendlines(1).Count = 1 Then
    [Statement]
End If

但测试失败了.

我究竟做错了什么?什么是非脏的方式呢?

谢谢,

最佳答案
你的If语句有三个问题.如果你用较小的位分解你的陈述并分别测试它们,你会发现:

>这是Sheet1,而不是Sheet 1.没有空间.这是导致“下标超出范围”错误的原因.
> SeriesCollection属性适用于Chart对象,而不适用于ChartObject对象.是的,我知道这个愚蠢的Excel术语令人困惑. Anyhoo,你需要ChartObjects(1).Chart.SeriesCollection(1),而不是ChartObjects(1).SeriesCollection(1).
>趋势线(1)返回一个不可数的Trendline对象.您想要计算趋势线集合中的项目,即Trendlines.Count,而不是Trendlines(1).Count.

总结一下,这是如何写它:

If Sheets("Sheet1").ChartObjects(1).Chart _
    .SeriesCollection(1).Trendlines.Count > 1 Then
    MsgBox "there is exactly one trendline"
End If

注意:这仅在趋势线计数恰好为1时才有效.如果可能有多个,请考虑使用> =替换=.

转载注明原文:检查趋势线是否存在于VBA中 - 代码日志