Как сохранить событие PT Update для листа, который удаляется / воссоздается при открытии? - PullRequest
0 голосов
/ 30 апреля 2020

Вчера я написал код VBA в папке Microsoft Object и на листе для переформатирования сводной диаграммы после фильтрации с использованием события Worksheets_PivotTableUpdate и частного подпрограммы. Он работал отлично!

Вчера я закрыл и снова открыл файл, и он исчез, и фильтрация не запускала код, несмотря на то, что он работал, когда был открыт VBA. Я пошел, чтобы посмотреть в листе, и там нет кода. Я думал, что забыл сохранить или сохранить неправильно, поэтому я написал это снова и сегодня утром, когда я снова открыл файл ... форматирование после фильтрации кода не работает, код не найден. Так ... где это? Почему это не экономит?

Несколько человек будут использовать этот файл, поэтому я не могу просто переделывать его каждый раз, когда мне это нужно, и к тому же не имеет смысла просто исчезать при каждом закрытии / открытии файла. Я знаю много кода для работы в VBA и особенно с PivotTables / Charts, но я все еще считаю себя новичком.

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

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

Dim pc_utl As Chart Dim chart_rng_2 As Range Set chart_rng_2 = wsu.Range ("B10: F35") 'Где Поместите Кольцевую Диаграмму на лист

With chart_rng_2
    Set pc_utl = wsu.ChartObjects.Add(Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height).Chart 'Creates donut chart if it doesn't exist already
End With

Application.ScreenUpdating = True

With pc_utl
    .ChartType = xlDoughnut 'Sets chart type to donut
    .ApplyDataLabels Type:=xlDataLabelsShowPercent 'Labels donut slices with % data from PTable
    .HasTitle = True
    .ChartTitle.Text = title_formula_2 'Dynamic chart title
    .Legend.Position = xlLegendPositionBottom
    .PlotBy = xlColumns
    .DoughnutGroups(1).DoughnutHoleSize = 25
End With
Else 'Refresh PivotTable and PivotChart if they exist already
    pt_utl.ChangePivotCache pivot_cache_2
    pt_utl.RefreshTable
End If

Вот код, хранящийся на листе:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
If Target = "%Utilization" Then
    With Worksheets("Utilization")
        With .ChartObjects("Chart 1").Chart
            .ApplyDataLabels Type:=xlDataLabelsShowPercent
        End With
    End With
End If

End Sub


...