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