尽管插入了一个对象却找不到图表对象

时间:2019-09-10 14:25:33

标签: excel vba charts

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

对象隐藏在哪里?

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

  1. ?ThisWorkbook.Charts =0。
  2. ?ThisWorkbook.Worksheets(“ Graph”)。ChartObjects.Count = 1
  3. ?ThisWorkbook.Worksheets(“图表”).ChartObjects.Count = 0

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

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

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

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

很抱歉,如果这看起来像是一个非常基本的问题,那么我只是进入图表。

编辑:添加了循环:

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:我确认此问题与图表类型(瀑布)有关。我删除了瀑布并使用了另一个-现在上面的集合中有另一个Chart。删除其中一个并再次放入瀑布:在ChartObjects中找不到它...

PPS:我在堆栈溢出中发现了以下问题,现在我想知道它是否与...有关:Error copying waterfall charts with Excel macro

1 个答案:

答案 0 :(得分:0)

嘿,请找出我的遍历图表的提议。

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