VBA确定系列计数和删除

我有一些使用命名范围创builddynamic图表的代码。 图表应该只有5个系列,但由于某种原因,它创造的不止于此。 因此我想确定图表有多less个系列,并删除SeriesCollection(5)上面的所有系列。 我相信我这样做的方式是非常低效的,并且已经分解了好几次(由于无效参数错误)。 我怎样才能以有效的方式编写这个任务,而不需要处理错误呢? 我目前使用的代码是:

With ActiveChart If .SeriesCollection.Count = 6 Then .SeriesCollection(6).Delete End If If .SeriesCollection.Count = 7 Then .SeriesCollection(6).Delete .SeriesCollection(7).Delete End If If .SeriesCollection.Count = 8 Then .SeriesCollection(6).Delete .SeriesCollection(7).Delete .SeriesCollection(8).Delete End If End With 

照顾这些线路:

 If .SeriesCollection.Count = 7 Then 

删除执行正常的SeriesCollection(6) 。 但是,collections品的工作方式是顺序的,所以SeriesCollection(7)被转移到了(6)位置。 然后,当你去删除(7)它不再存在,你会得到一个错误。 尝试这个:

 If .SeriesCollection.Count = 7 Then .SeriesCollection(7).Delete .SeriesCollection(6).Delete End If If .SeriesCollection.Count = 8 Then .SeriesCollection(8).Delete .SeriesCollection(7).Delete .SeriesCollection(6).Delete End If 

让我们知道这是否有效。

这是另一种方式,最终将归结为更less的代码行,而不必担心必须添加一堆if语句来解决“最糟糕的情况”。 另外,如果您的系列less于6个,则会一起跳过删除:

 Sub test() Dim seriesCount As Long Dim counter As Long With ActiveChart seriesCount = .SeriesCollection.Count For counter = seriesCount To 6 Step -1 .SeriesCollection(counter).Delete Next counter End With End Sub 

正如CodeJobey所指出的那样。当删除时,总是从下往上(当你想要循环遍历行并删除这些信息的时候,保留这些信息)。

我认为这里理解的重点是,每次删除一个系列时,图表的系列列表将被重新编号为连续的1 … N。 所以如果你有8个系列,你有系列指数1 … 8。 如果你删除了seriesCollection(6),现在你的系列编号为1 … 7。 但是请注意,您仍然有一个系列collections(6) – 这是删除步骤之前的第7个系列。

这是我的代码build议:

 Do While .SeriesCollection.Count > 5 .SeriesCollection(6).Delete Loop