Запись макроса сводной диаграммы - имя диаграммы вызывает ошибку во время выполнения - PullRequest
0 голосов
/ 26 марта 2020

Запись макроса создания сводной диаграммы. Создание сводной таблицы и диаграммы, а затем редактирование свойств диаграммы.

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

"Ошибка времени выполнения" 2147024809 (80070057) '

Элемент с указанным именем не найден

Кажется, проблема заключается в именовании диаграммы. Пример: когда я записываю макрос, Excel называет диаграмму "Диаграмма 1". Но когда я воссоздаю сценарий, тогда диаграмма называется "Диаграмма 2" и поэтому макрос не работает. Если я go и вручную изменяю имя на «Диаграмма 2», код завершает выполнение нормально.

Если я пытаюсь назвать диаграмму во время записи макроса, я сталкиваюсь с подобным проблема, т. е. он пытается изменить «Диаграмма 1» на «Новое имя диаграммы», но не может найти «Диаграмму 1».

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

ActiveChart.Name = "Name of this Chart"

... после создания диаграммы, но это не сработало.

Full код ниже. Любая помощь очень ценится!

'
' Create_NITS_Pivot Macro
'

'
    Columns("A:AE").Select
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "'Tags Data Dump'!R1C1:R200C31", Version:=6).CreatePivotTable _
        TableDestination:="'NITS Pivot Chart'!R1C1", TableName:="PivotTable15", _
        DefaultVersion:=6
    Sheets("NITS Pivot Chart").Select
    Cells(1, 1).Select
    With ActiveSheet.PivotTables("PivotTable15")
        .ColumnGrand = True
        .HasAutoFormat = True
        .DisplayErrorString = False
        .DisplayNullString = True
        .EnableDrilldown = True
        .ErrorString = ""
        .MergeLabels = False
        .NullString = ""
        .PageFieldOrder = 2
        .PageFieldWrapCount = 0
        .PreserveFormatting = True
        .RowGrand = True
        .SaveData = True
        .PrintTitles = False
        .RepeatItemsOnEachPrintedPage = True
        .TotalsAnnotation = False
        .CompactRowIndent = 1
        .InGridDropZones = False
        .DisplayFieldCaptions = True
        .DisplayMemberPropertyTooltips = False
        .DisplayContextTooltips = True
        .ShowDrillIndicators = True
        .PrintDrillIndicators = False
        .AllowMultipleFilters = False
        .SortUsingCustomLists = True
        .FieldListSortAscending = False
        .ShowValuesRow = False
        .CalculatedMembersInFilters = False
        .RowAxisLayout xlCompactRow
    End With
    With ActiveSheet.PivotTables("PivotTable15").PivotCache
        .RefreshOnFileOpen = False
        .MissingItemsLimit = xlMissingItemsDefault
    End With
    ActiveSheet.PivotTables("PivotTable15").RepeatAllLabels xlRepeatLabels
    ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
    ActiveChart.SetSourceData Source:=Range("'NITS Pivot Chart'!$A$1:$C$18")
    ActiveChart.PivotLayout.PivotTable.AddDataField ActiveChart.PivotLayout. _
        PivotTable.PivotFields("NITS 16"), "Sum of NITS 16", xlSum
    ActiveChart.PivotLayout.PivotTable.AddDataField ActiveChart.PivotLayout. _
        PivotTable.PivotFields("NITS 17"), "Sum of NITS 17", xlSum
    ActiveChart.PivotLayout.PivotTable.AddDataField ActiveChart.PivotLayout. _
        PivotTable.PivotFields("NITS 18"), "Sum of NITS 18", xlSum
    ActiveChart.Name = "NITS_Chart"
    With ActiveChart.PivotLayout.PivotTable.DataPivotField
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveChart.PivotLayout.PivotTable.PivotFields("Utility Acct/Cust#")
        .Orientation = xlPageField
        .Position = 1
    End With
    With ActiveChart.PivotLayout.PivotTable.PivotFields("Sub-account name")
        .Orientation = xlColumnField
        .Position = 1
    End With
    ActiveSheet.Shapes("Chart 2").IncrementLeft -1030.5
    ActiveSheet.Shapes("Chart 2").IncrementTop -192.5
End Sub

1 Ответ

1 голос
/ 27 марта 2020

Лучший подход здесь состоит в том, чтобы привыкнуть захватывать возвращаемое значение из таких методов, как AddChart:

Dim co As Shape
Set co = ActiveSheet.Shapes.AddChart()

Здесь co - это объект Shape / ChartObject, на который вы можете ссылаться позже в своем коде, вместо того, чтобы помечать все с помощью .Select и использовать ActiveThing, чтобы надеяться достичь его позже.

Итак:

co.IncrementLeft -1030.5

или ссылаться на содержащиеся Chart:

co.Chart.SetSourceData

et c et c.

То же самое относится и к созданию сводных кэшей и сводных объектов.

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