2017-06-28 12 views
-1

マクロを使用してシートのすべてのチャートを調べ、#N/A値/キャプションのデータラベルを非表示にします私のグラフのシリーズ、目的に応じて1つの緑と1つの赤)。実行時エラー '438'シートのすべてのチャートをループしているとき

私はこのサブを実行すると、私はこれを取得:「実行時エラー 『438』:オブジェクトはこのプロパティまたはMethodeのをサポートしていません

これが起こるのコード行は次のいずれかです。
For l = 1 To .SeriesCollection(k).Points(j).DataLabels.Count

私はこの問題のために、他の多くの質問/答えの表情してきたが、それはこの種のエラーになると、すべてのケースがdiferentようだ。

ポイントピンでしたVBAのより良い理解を持つ誰もがあります問題?

Sub LoopThroughCharts() 
'PURPOSE: Loop through every graph in the a selected worksheet 

Dim sht As Worksheet 
Dim CurrentSheet As Worksheet 
Dim cht As ChartObject 

Application.ScreenUpdating = False 
Application.EnableEvents = False 

Set CurrentSheet = ActiveSheet 

With ActiveWorkbook.Worksheets("Graph Annuel") 
    For Each cht In .ChartObjects 
    cht.Activate 
    With ActiveChart 
    For k = 1 To .SeriesCollection.Count 
     For j = 1 To .SeriesCollection(k).Points.Count 
      For l = 1 To .SeriesCollection(k).Points(j).DataLabels.Count 
       If .SeriesCollection.Points(j).DataLabels.Item(l).Caption = "#N/A" Then 
        .SeriesCollection.Points(j).DataLabels.Item(l).Delete 
       End If 
      Next l 
     Next j 
    Next k 
    End With 
    Next cht 
End With 

CurrentSheet.Activate 
Application.EnableEvents = True 

End Sub 
+1

ありません私の頭の上から確かに1つの* point *オブジェクト(例えば、 'Points(j)'に 'DataLabels'コレクションがないと賭けています)単純に' .SeriesCollection(j).DataLabels.Count '? –

答えて

2

PointオブジェクトがDataLabels性質を持っていないので、あなたはPoints(j).DataLabelsを反復することはできません。 (

Dim cObj As ChartObject, cht As Chart, srs As Series, p As Integer 
For Each cObj In ActiveSheet.ChartObjects 
    Set cht = cObj.Chart 
    With cht 
     For Each srs In .SeriesCollection 
      If srs.HasDataLabels Then 
       For p = 1 To srs.Points.Count 
        If srs.Points(p).HasDataLabel Then 
         If srs.DataLabels.Item(p).Caption = "#N/A" Then 
          srs.DataLabels.Item(p).Caption = "" 
         End If 
        End If 
       Next 
      End If 
     Next 
    End With 
Next 

コレクションから削除してみてください、あなたはあなたが逆の指標でそれを行う場合を除き、エラーに実行します:

これ試してみてください(ないに変更し、キャプションがちょうど空の文字列を使用しを削除します)これは可能ですが、空の文字列を使用するだけの場合は必要ありません)。それは、一連の個々のPointためFalseをすることができますがsrs.HasDataLabelTrueをするため

はまたDataLabelがすでに削除されている場合は、エラーをヒットしていないことを確認するためにいくつかのロジックを追加した(すなわち、それは可能です。

+0

私は仕事でtomorowを試してみましょう!ありがとうございました:) –

+0

それは動作します!ありがとうございました! –