【发布时间】:2016-09-17 14:52:01
【问题描述】:
我有两个包含图表的工作表,并使用宏遍历所有包含图表的工作表并更新图表值。
但是,当我尝试在第一个之后引用工作表中的图表时遇到了问题 - 尽管工作表的引用发生了变化,但对图表的引用却没有。
循环如下所示:
For Each ws In ThisWorkbook.Worksheets
Debug.Print ws.Name
Debug.Print ws.ChartObjects("Kortsone").Chart.Name
With ws.ChartObjects("Kortsone").Chart
...
End With
Next ws
我到即时窗口的输出如下:
Grafar ovn 3
Grafar ovn 3 Kortsone
Grafar ovn 4
Grafar ovn 3 Kortsone
您可以看到对工作表的引用发生了变化,但图表引用没有。
有什么办法可以解决这个问题,还是我必须用唯一的名称重命名我的所有图表?
我正在使用 Excel 2013
- 编辑- 我现在已经根据 cmets 中的建议进行了一些测试,似乎打印到即时窗口的内容取决于当前的活动工作表。
尝试使用 for each chartobject 时遇到了与我之前遇到的相同问题:
Sub test2()
Dim ws As Worksheet
Dim ch As ChartObject
For Each ws In ThisWorkbook.Worksheets
For Each ch In ws.ChartObjects
If ws.CodeName = "Graf4" Then
Debug.Print ws.Name
Debug.Print ch.Name
Debug.Print ch.Chart.Name
End If
Next ch
Next ws
End Sub
给:
Grafar ovn 4
Kortsone
Grafar ovn 3 Kortsone
Grafar ovn 4
Langsone
Grafar ovn 3 Langsone
...
【问题讨论】:
-
我无法复制这个。它在 Excel 2010 上运行良好。您使用的是什么版本?
-
@BrettWolfington 2013
-
不能使用嵌套循环吗?像这样:
For Each ws In ThisWorkbook.Worksheets For Each co In ws.ChartObjects ... Next co Next ws -
@tom 我刚试了一下,还是一样的错误。
-
不应该这样称呼它
ch.Chart.Name。请参阅下面的答案。