首页 > 解决方案 > 尽管插入了图表对象,但找不到图表对象

问题描述

我刚刚开始使用 VBA 中的图表。该手册似乎直截了当:所有图表都包含在 Workbook.Charts 和/或(好吧,对于初学者来说不是很清楚,事实证明)Worksheets(x).ChartObjects。只是,我现在在我的工作簿中有一个图表,我在这两个集合中都找不到。

对象藏在哪里?

我正在运行一个 Little Marco,它应该根据我的定义设置所有图形的颜色。工作簿中有两个图表,位于不同的电子表格上。第二个(“消失”的那个)是瀑布类型。

  1. ?ThisWorkbook.Charts = 0。
  2. ?ThisWorkbook.Worksheets("Graph").ChartObjects.Count = 1
  3. ?ThisWorkbook.Worksheets("Charts").ChartObjects.Count = 0

前两个结果很好,第三个也应该是 1。

我怀疑任何代码都会有用 - 因为我可能只是在寻找错误的角落?

循环浏览工作簿中的所有图表的安全方法是什么?在图表对象中循环遍历每个工作表的图表并不能完成这项工作。

为什么我在工作表中找不到图表?这是瀑布的特产吗?

如果这看起来是一个非常基本的问题,我很抱歉,我刚刚开始研究图表。

编辑:添加循环:

Public Sub hrFormatAllCharts()
    Debug.Print ("hrFormatAllCharts: Enter")
    Dim ws  As Worksheet
    Dim cht As ChartObject
    For Each ws In ThisWorkbook.Worksheets
        Debug.Print ("Charts in worksheet " & ws.Name & " : " & ws.ChartObjects.Count & ".")
        For Each cht In ws.ChartObjects
            Call hrFormatChart(cht.Chart)
        Next cht
    Next ws
    Debug.Print ("hrFormatAllCharts: Exit")
End Sub

加分问题:既然我可以看到图表,有没有办法通过 GUI 询问对象“你住在哪里?”?

PS:我验证了这个问题与图表类型(瀑布)有关。我删除了瀑布并使用了另一个 - 现在其他图表在上述集合中。删除那个并再次放入一个瀑布:在 ChartObjects 中找不到它......

PPS:我在堆栈溢出中发现了以下问题,现在我想知道它是否相关......:使用 Excel 宏复制瀑布图时出错

标签: excelvbacharts

解决方案


嘿,请找到我关于循环图表的提议。

Sub LoopThroughCharts()

Dim charts As ChartObjects
Dim chart As ChartObject
Dim sheetIterator As Integer
Dim loopSheet As Worksheet

For sheetIterator = 1 To ThisWorkbook.Worksheets.Count()
    Set loopSheet = ThisWorkbook.Worksheets(sheetIterator)
    Debug.Print loopSheet.Name

    Set charts = loopSheet.ChartObjects

    For Each chart In charts
        Debug.Print chart.Name
    Next chart


Next sheetIterator

End Sub

推荐阅读