Похожие вопросы

Как построить положительные и отрицательные значения по обе стороны оси в Excel?
Добавление данных в диаграмму и использование той же горизонтальной оси в Excel
Как добавить маркеры во все ряды линейного графика excel за один раз?
Как прикрепить заметку к определенной дате на динамическом графике в Excel?
Создание диаграммы Excel с двумя осями y: постоянные данные на оси 1, выпадающий список данных на оси 2?
Динамический выбор меры диаграммы в Power BI
Построение квартальных и месячных данных в Excel
Как построить график нескольких фактических vs целевых в диаграмме? Стрелки вверх вниз? А как показать кумулятивное?
Настройка максимального значения оси Y на гистограмме в LibreOffice Calc
Объединение 2 именованных диапазонов в одну линейную диаграмму серии в Excel 2010
Диаграмма не показывает все данные
Диаграмма Excel показывает годовые интервалы по оси
В Excel График График (Отслеживание Автомобиля )
Метка оси графика LibreOffice
Как наложить две гистограммы в Excel?

Excel 2013-удаление объектов LegendEntry из легенды сводной диаграммы с помощью VBA

У меня есть сводная диаграмма, которая обычно показывает 6-8 серий из возможных 15, многие из которых, как правило, равны нулю. Таким образом, каждый раз, когда он обновляется, у него есть 15 серий, и легенда должна только перечислить серию с ненулевыми цифрами, чтобы диаграмма была лаконичной и легкой для чтения.

Я пытаюсь использовать VBA для удаления конкретных элементов, где серия все ноль (максимальное значение = 0), и возникло больше проблем, чем ожидалось:

  1. Я перебираем каждый элемент из графика FullSeriesCollection, проходя вперед по списку серий один за другим. Однако, поскольку легенда является отдельным объектом из серии,вы не можете использовать текущую серию из моего цикла, чтобы обратиться к нему, и поэтому требуется счетчик цикла.

  2. нет способа узнать имя/значение элемента LegendEntries, так что вы должны соответствовать серии с легендой, не будучи в состоянии подтвердить что LegendEntries элемент, который.

(по-видимому, ниже функция присутствует в Excel 2007 и далее?)

  1. похоже, что объект FullSeriesCollection упорядочивает элементы (разумно) от 1 до 13 по мере прохождения, но объект LegendEntries упорядочивает элементы в обратном порядке, от 13 К 1.

  2. объект LegendEntries начинает свой индекс с 0, поэтому его предметы на самом деле от 12 до 0.

  3. В LegendEntries объект пере-числил его элементов по мере их удаления от нее.
    Поэтому при удалении элемента 1 все элементы в списке нумеруются от 11 до 0.

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

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

как вы эффективно цикл через элементы сводной таблицы и удалить соответствующие серии LegendEntries, где элементы все-ноль?

5
задан Steve Taylor
источник

1 ответов

начните с события Worksheet_PivotTableUpdate

лист, на котором находится сводная таблица нуждается в следующем коде, поэтому он вызывает новую функцию "RefreshAbsenceLabels" в модуле 1 всякий раз, когда это специально имени сводная таблица обновляется:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)

If Target.Name = "This Specific Table" Then

    Module1.RefreshAbsenceLabels
    MsgBox "The PivotTable has been updated."

End If

End Sub

поговорите с правой диаграммой и обновите ее легенду

Public Function RefreshAbsenceLabels()

Set DaysAbsent = ActiveWorkbook.Worksheets("Dashboard").ChartObjects("Department Absences")

With DaysAbsent.Chart

    If .HasLegend Then
        .HasLegend = False
    End If
    .HasLegend = True

настройте счетчик и установите его на количество серий минус one

минус один, чтобы объяснить тот факт, что FullSeriesCollection пронумерован от 1 до X, в то время как элементы LegendEntries пронумерованы X-1 до 0

    Dim x As Integer
    x = .FullSeriesCollection.Count - 1

цикл через серию, удаляя соответствующие элементы LegendEntries

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

приложение.WorksheetFunction.Макс находит наибольшее значение из серии

    For Each ser In .FullSeriesCollection

        If Application.WorksheetFunction.Max(ser.Values) = 0 Then
            'MsgBox "Deleting" & ser.Name & " - " & x
            .Legend.LegendEntries(x).Delete
        End If

        x = x - 1
    Next
End With
End Function
0
отвечен Steve Taylor 2016-11-08 10:53:49
источник