使用VBA遍历工作簿中的所有图表

时间:2016-04-30 14:12:49

标签: excel vba loops charts foreach

我试图遍历工作簿中的所有图表。 为什么选项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

2 个答案:

答案 0 :(得分:10)

有两种图表:

  1. “大”图表 - 整个图表
  2. “小”图表 - 工作表中嵌入的图表对象
  3. 此代码:

    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
    

答案 1 :(得分:0)

作为the documentation statesApplication.Charts会返回包含所有图表(不是图表!)的Sheets集合。但是,对于Worksheet.ChartObjectsthe documentation says它会返回包含该表上所有图表的ChartObjects集合。