使用 VBA 遍历工作簿中的所有图表
Posted
技术标签:
【中文标题】使用 VBA 遍历工作簿中的所有图表【英文标题】:Loop through all charts in a workbook with VBA 【发布时间】:2022-01-19 15:01:08 【问题描述】:我正在尝试遍历工作簿中的所有图表。 为什么选项 1 有效,而选项 2 无效?
'选项 1
For Each sht In ActiveWorkbook.Worksheets
For Each cht In sht.ChartObjects
MsgBox (cht.Name)
Next cht
Next sht
'选项2
Dim oChart As Chart
For Each oChart In Application.Charts
MsgBox (oChart.Name)
Next oChart
End Sub
【问题讨论】:
选项 1 列出所有 嵌入图表(即任何工作表中包含的图表 - 请参阅 here),而选项 2 列出所有 图表表(见here) 【参考方案1】:图表有两种风格:
-
“大”图表 - 整个图表表
“小”图表 - 嵌入工作表中的图表对象
这段代码:
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
请注意,我们需要一个显式的If
语句来处理没有图表的工作表,.Chart
用于访问每个 ChartObjects 列表中的图表。
【讨论】:
【参考方案2】:作为the documentation states,Application.Charts
返回一个包含所有图表工作表(不是图表!)的Sheets
集合。但是,对于 Worksheet.ChartObjects
,the documentation says 会返回一个包含该工作表上所有图表的 ChartObjects
集合。
【讨论】:
以上是关于使用 VBA 遍历工作簿中的所有图表的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA - 循环遍历多个文件夹中的文件,复制范围,粘贴到此工作簿中
如何将工作簿中的某些工作表导入文件夹中的其他工作簿? (VBA)