2011-12-05 93 views
3

我有一个在Excel 2003中编写的VBA宏,它在Excel 2003和2007中工作得非常好。但是,它在Excel 2010中摔倒了,我无法说出原因。无法删除在Excel 2010中使用VBA的图表系列

宏在用户添加或删除数据后更新图表中的系列。第一步(数据验证之后)是删除图表中第一个系列以外的所有系列。

'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 

对象变量正确设置和消息框给出正确的输出,但它仍然落在了上theSeries。删除。

最后,我重复了上述所有使用Excel 2010中创建的全新图表,以防万一它是2003年的遗留问题,但我得到了同样的错误。

我正在撕裂我的头发。我在网上搜索解决方案无济于事,这是什么导致我到这个堆栈溢出网站。我会很感激任何人都可以提供的帮助。

问候,

达伦

+0

+1用于详细说明迄今为止采取的步骤。问题:纸张受到保护的可能性有多大? –

+0

谢谢你Rachel。我希望是这样,尽管我会觉得有点傻。自从我发布以来,我已经确定了一件事,这让我认为这是2003年的某种遗产。如果我在新工作簿中创建新图表,我不会遇到问题。但是现有工作簿中的新图表不起作用,即使我先删除所有其他图表和VBA模块。我想我将不得不从头开始重新创建整个工作簿。 Darren

+0

Rachel的+1未能正常工作,但您仍然可以享受它。顺便说一下,您可以尝试在引起错误的行上设置一个断点并查看'theChart.SeriesCollection(2)'对象并检查它是什么 – JMax

回答

0

您是否尝试过这种方式呢?

For x = theChart.SeriesCollection.Count To 2 Step -1 
    theChart.SeriesCollection(x).Delete 
Next x 
0

从收集开始删除项目,总是会有第一个元素,直到您全部删除它们。

Do While theChart.SeriesCollection.Count > 1 
    theChart.SeriesCollection(1).Delete 
    'theChart.SeriesCollection(2).Delete  
Loop 
+0

谢谢user2169636和其他人。事实证明,.xlsm文件中存在某种故障。我导出了所有宏模块,并将图表重建为新文件,并且一切正常。我的公司当时正在使用“兼容模式”,并且我听说过有关此工作簿的其他报告。 – Darren