2016-04-30 10 views
2

ブック内のすべてのグラフをループ処理しようとしています。 オプション1は機能しますが、オプション2は機能しないのはなぜですか?VBAを使用したブック内のすべてのグラフをループする

'OPTION 1

For Each sht In ActiveWorkbook.Worksheets 
    For Each cht In sht.ChartObjects 
     MsgBox (cht.Name) 
    Next cht 
Next sht 

' OPTION2

Dim oChart As Chart 
    For Each oChart In Application.Charts 
     MsgBox (oChart.Name) 
    Next oChart 
End Sub 
+0

オプション1には、すべての_embedded charts_(つまり、ワークシートに含まれているチャート - [here](https://msdn.microsoft.com/en-us/library/office/ff195149(v=office.15)参照) .aspx))、オプション2はすべての_chartシートをリストします([ここ](https://msdn.microsoft.com/en-us/library/office/ff839597(v=office.15).aspx)を参照)) – user3598756

答えて

7

チャートの2種類があります。

  1. "ビッグ" のチャート - グラフ全体のシート
  2. 「少しは"ワークシートに埋め込まれたチャート - チャートオブジェクト

このコード:

Sub dural() 
    Dim oChart As Chart 
    For Each oChart In Application.Charts 
     MsgBox oChart.Parent.Name & vbCrLf & oChart.Name 
    Next oChart 
End Sub 

は "ビッグ" 様々な情報が表示されます。

、あなたは "少し" のチャート上の情報が必要な場合:

Sub dural2() 
    Dim sh As Worksheet, i As Long 
    For Each sh In Worksheets 
     If sh.ChartObjects.Count > 0 Then 
      For i = 1 To sh.ChartObjects.Count 
       MsgBox sh.ChartObjects(i).Chart.Name 
      Next i 
     End If 
    Next sh 
End Sub 
0

the documentation statesとして、Application.Chartsすべてのグラフシートcontaing Sheetsコレクションを返します(ないチャートを!)。ただし、Worksheet.ChartObjectsの場合、the documentation saysは、そのシート上のすべての図表を含むChartObjectsコレクションを返します。

関連する問題