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

时间:2012-04-30 15:47:23

标签: vba object exists trendline

我有一张带有图表的表格。我需要插入一个按钮来打开/关闭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

但测试失败了。

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

谢谢, 人

1 个答案:

答案 0 :(得分:5)

您的If声明有三个问题。如果你用较小的位分解你的陈述并分别测试它们,你会发现:

  1. 它是Sheet1,而不是Sheet 1。没有空间。这就是导致“下标超出范围”错误的原因。
  2. SeriesCollection属性适用于Chart个对象,而不适用于ChartObject个对象。是的,我知道这个愚蠢的Excel术语令人困惑。 Anyhoo,您需要ChartObjects(1).Chart.SeriesCollection(1),而不是ChartObjects(1).SeriesCollection(1)
  3. Trendlines(1)会返回一个Trendline对象,该对象不具有Count能力。您想要计算趋势线集合中的项目,即Trendlines.Count,而不是Trendlines(1).Count
  4. 总结一下,这就是写它的方法:

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

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