使用VBA循环浏览工作簿中的所有图表

我正试图循环遍历工作簿中的所有图表。 为什么选项1工作,但选项2不是?

'选项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 

有两种风格的图表:

  1. “大”的图表 – 一个完整的图表
  2. “小”图表 – embedded在工作表中的图表对象

此代码:

 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 

正如文档所述 , Application.Charts返回一个Sheets集合,包含所有图表(不是图表!)。 但是,对于Worksheet.ChartObjects , 文档说明它将返回包含该表单上所有图表的ChartObjects集合。