【问题标题】:Can't find chart object despite having inserted one尽管插入了图表对象,但找不到图表对象
【发布时间】:2019-09-17 23:01:55
【问题描述】:

我刚刚开始使用 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:我在堆栈溢出中发现了以下问题,现在我想知道它是否相关...:Error copying waterfall charts with Excel macro

【问题讨论】:

  • “我怀疑任何代码都会有用” - 它肯定会。循环遍历工作表,然后循环遍历每个工作表中的图表对象。
  • @TimWilliams 那么,请参阅上面的代码。但我真的认为我只是在寻找错误的地方 - 某些图表是否可能存储在其他地方?否则我看不出为什么上面的代码没有列出图表。
  • 我在 Office 365 上,并且 ChartObjects.Count 返回带有插入瀑布图的预期值。您使用的是什么 Excel 版本/操作系统,您是如何插入“缺失”图表的?手动还是使用宏?
  • @TimWilliams 我在 Windows 7 Enterprise 上使用 Excel 2016。我手动添加了图表,而不是从脚本中添加。
  • 将此?ThisWorkbook.Charts 更改为?ThisWorkbook.Charts.Count。我猜你只是打字太快了,但是...

标签: excel vba charts


【解决方案1】:

嘿,请找出我关于循环图表的建议。

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

【讨论】:

  • 这似乎很危险:混合工作表和工作表。这些是不同的类和不同的集合,可能导致计数的不同结果。我想知道为什么没有关于 loopSheet 被定义为 Worksheet 的警告,然后它被分配了一个 Sheet?
  • @YeOldHinnerk 所以我从 Sheets 更改为 Worksheets,没什么大不了的,现在试试吧。
  • 好吧,仍然是同样的奇怪行为。它不会在列表中显示瀑布图。
猜你喜欢
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 2019-08-27
  • 2016-11-14
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
相关资源
最近更新 更多