我有一个用Excel 2003编写的VBA宏,它在Excel 2003和2007中运行得非常好。但是,它在Excel 2010中失败了,我不知道为什么。
宏在用户添加或删除数据后更新图表中的系列。第一步(在数据验证之后)是删除图表中除第一个系列之外的所有系列。
'clear all chart series except for series 1
Do While theChart.SeriesCollection.Count > 1
theChart.SeriesCollection(2).Delete
Loop
执行在循环的第一次迭代中停止,错误对话框“对象'系列'的方法'删除'失败。”
我想也许对象模型在Excel 2010中已经改变了,所以我使用宏录制器来记录删除系列的动作:
ActiveSheet.ChartObjects("Plant Feed").Activate
ActiveChart.SeriesCollection(3).Select
Selection.Delete
运行录制的宏(系列3明显重新设置)在第二行停止,“方法'选择'对象'系列'失败。”
然后我添加了一个对象变量和一些msgbox行来尝试调试问题:
Dim theSeries As Series
ActiveSheet.ChartObjects("Plant Feed").Activate
MsgBox (ActiveChart.SeriesCollection(3).Name)
Set theSeries = ActiveChart.SeriesCollection(3)
MsgBox (theSeries.Name)
theSeries.Delete
对象变量设置正确,消息框给出了正确的输出,但它仍然落在了Series.delete上。
最后,我使用在Excel 2010中创建的全新图表重复了上述所有内容,以防万一这是2003年的遗留问题,但我也遇到了同样的错误。
我正在撕扯我的头发。我在网上搜索无效的解决方案,这就是导致我进入Stack Overflow网站的原因。我很感激任何人都可以提供的任何帮助。
此致
的Darren
答案 0 :(得分:0)
您是否尝试过这种方式?
For x = theChart.SeriesCollection.Count To 2 Step -1
theChart.SeriesCollection(x).Delete
Next x
答案 1 :(得分:0)
从集合的开头删除项目,总会有第一个元素,直到你全部删除它们。
Do While theChart.SeriesCollection.Count > 1
theChart.SeriesCollection(1).Delete
'theChart.SeriesCollection(2).Delete
Loop