Как я могу исправить свой код VBA в Excel, чтобы удалить определенные записи условных обозначений диаграммы на основе их значения? - PullRequest
1 голос
/ 25 апреля 2019

У меня есть график с 5 рядами данных.Я хочу, чтобы все 5 серий отображались на графике, но я хочу, чтобы только 3 из них отображались в легенде.Мне бы хотелось, чтобы записи легенды были удалены на основе названия серии ... "Легендарный диапазон цели" и "Целевой диапазон снизу" следует исключить из легенды.

У меня есть код, который, как мне кажется, должен работать, но я получаю сообщение об ошибке и не могу понять, почему.

Вот код, который я пробовал:

Sub Charts_RemoveLegendEntry()
Dim i As Long
Dim cht As Chart
Dim lgd As Legend
 Set cht = ActiveChart
   Set lgd = cht.Legend
   For i = cht.SeriesCollection.Count To 1 Step -1
         Select Case cht.SeriesCollection(i).Name
         Case "Target Range Upper", "Target Range Lower"
                 lgd.LegendEntries(i).Delete
         Case Else
                 ' do nothing
         End Select
   Next
End Sub

Странно, если я поменяю нижнюю часть следующим образом:

Select Case cht.SeriesCollection(i).Name
Case "Target Range Upper", "Target Range Lower"
     ' do nothing
Case Else
     lgd.LegendEntries(i).Delete
End Select

Макрос работает отлично - просто делаю обратное тому, что я хочу.Он избавляется от записей легенды, которые я хочу сохранить, и сохраняет те, которые я хочу удалить.Я не понимаю, почему это не работает в обоих направлениях.

Мне нужно сделать это и для пары других графиков в рабочей книге, но если я смогу разобраться с 1, то смогунастроить для остальных.

* ОБНОВЛЕНИЕ РЕДАКТИРОВАНИЯ

Изменение For i = cht.SeriesCollection.Count To 1 Step -1 на For i = lgd.LegendEntries.Count To 1 Step -1 работало для этого графика.Однако я попытался воссоздать макрос для другого графика на другом листе, и теперь я получаю сообщение об ошибке « Run-time '91': переменная объекта или переменная блока не установлена ​​».Что мне не хватает?Вот мой второй код для следующего листа ...

    Sub Charts_RemoveLegendEntry2()
    Dim i As Long
    Dim cht As Chart
    Dim lgd As Legend
     Set cht = ActiveChart
       Set lgd = cht.Legend
       For i = lgd.LegendEntries.Count To 1 Step -1
             Select Case cht.SeriesCollection(i).Name
             Case "Total", ""
                     lgd.LegendEntries(i).Delete
             Case Else
                     ' do nothing
             End Select
       Next
End Sub

Кажется, что он разрывается в строке For i = lgd.LegendEntries.Count To 1 Step -1.

...