I am trying to loop through all charts in a workbook. Why is option 1 working, but option 2 not?
'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
There are two flavors of charts:
This code:
Sub dural()
Dim oChart As Chart
For Each oChart In Application.Charts
MsgBox oChart.Parent.Name & vbCrLf & oChart.Name
Next oChart
End Sub
will display information about the "big" variety.
and if you want information on the "little" charts:
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
Note that we need an explicit If
statement to handle sheets with no charts and .Chart
is used to access the Chart within each of the ChartObjects list.
As the documentation states , Application.Charts
returns a Sheets
collection containg all chart sheets (not charts!). For Worksheet.ChartObjects
, however, the documentation says that it returns a ChartObjects
collection containing all charts on that sheet.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.