4

チャートが入ったシートがあります。トレンドラインのオン/オフを切り替えるボタンを挿入する必要があります。したがって、最初に、トレンドラインが存在するかどうかを確認する必要があります。単純に聞こえますが、私をNUTSに駆り立てています!!!

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

しかし、テストは失敗します。

私は何が間違っているのですか?それを行うための汚くない方法は何ですか?

ありがとう、アル

4

1 に答える 1

6

あなたのIf発言には3つの間違いがあります。ステートメントを細かく分割し、それぞれを個別にテストした場合、次のことがわかります。

  1. それSheet1は、ではありませんSheet 1。立つ瀬がない。これが、「添え字が範囲外です」というエラーの原因です。
  2. プロパティは、オブジェクトではなくオブジェクトにSeriesCollection適用されます。はい、私はこの愚かなExcelの用語が混乱していることを知っています。とにかく、あなたは必要です、ではありません。ChartChartObjectChartObjects(1).Chart.SeriesCollection(1)ChartObjects(1).SeriesCollection(1)
  3. Trendlines(1)Trendlineできないオブジェクトを返しますCount。トレンドラインコレクションのアイテムをカウントする必要があります。つまり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である場合にのみ機能します。複数ある可能性がある場合は、と交換=することを検討してください。>=

于 2012-04-30T16:37:22.597 に答える