Как удалить только лишние записи легенды, которые не нужны в гистограмме с накоплением в Excel VBA? - PullRequest
0 голосов
/ 20 мая 2019

Я нашел вопрос "Удаление записей легенды с пустым названием серии с использованием VBA" здесь Очень похоже на проблему, с которой я столкнулся, но с изюминкой.

У меня две кнопки,«Load Chart» и «Clear Chart» вот так The buttons to load and clear chart

Диаграмма представляет собой столбчатую диаграмму с несколькими сериями каждая.У меня есть некоторые отступы, в которых цвет заливки и границы линий были удалены, чтобы он выглядел как диаграмма Ганта.В настоящее время это выглядит так (Пустышка)

Duration of cases as a gantt chart

Также необходимо удалить запись легенды с именем padding и несколько дополнительных записей легенды в конце,Я попробовал следующий код, который запускается в конце макроса диаграммы загрузки:

With ActiveChart
        For i = .Legend.LegendEntries.Count To UptoRequiredSeries + 1 Step -1
                    .Legend.LegendEntries(i).Delete
'            Debug.Print .Legend.LegendEntries(i - 1)
        Next i
End With

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

Требуется ваша помощь, заранее спасибо.

РЕДАКТИРОВАТЬ1: у меня была эта проблемапотому что было больше серий, чем легенд, и это было потому, что некоторые цвета серии должны были повторяться.Как например: Серия A, затем B, затем Closed, а затем снова A.Когда цвет должен повториться, я создаю новую серию и устанавливаю нули для других случаев этого в массиве данных.Я использую операции нарезки для установки массива значений.

1 Ответ

0 голосов
/ 21 мая 2019

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

Затем вам нужно удалить их с последнего (наибольшее число) до первого.

ВыНе вдавайтесь в критерии удаления записи легенды, но предположим, что вы знаете, что хотите удалить два последних и первый, «отступ».Вы могли бы сделать что-то вроде этого:

Dim iSrs As Long
For iSrs = ActiveChart.SeriesCollection.Count To ActiveChart.SeriesCollection.Count - 1 Step -1
    ActiveChart.Legend.LegendEntries(iSrs).Delete
Next
ActiveChart.Legend.LegendEntries(1).Delete

Если это сложнее, вам нужно просто настроить массив (от 1 до .SeriesCollection.Count) и ввести в этот массив значение True или False, чтобы удалитьсоответствующей записи легенды, затем обратный отсчет от последней к первой, и, если соответствующий элемент массива равен True, удалите запись легенды.

Если вы удалили некоторые записи и вам нужно их вернуть, удалителегенда и восстановить его.Восстановленная легенда будет содержать все записи легенды, и вы можете начать заново.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...