Создать диаграмму для каждой сводной таблицы - PullRequest
0 голосов
/ 10 февраля 2019

В моем активном листе у меня есть две сводные таблицы (PivotTable1 и PivotTable2), иногда их может быть больше.Я пытаюсь добавить диаграмму для каждого PT в активном листе.Пока что я придумал этот код, но он дает мне 4 диаграммы, 3 пустых и правильную, если выбран один из СТ.

Sub CreateChart1()

Dim pivot As PivotTable, sh As Worksheet, nrp As Long

Set sh = ThisWorkbook.Sheets("Sheet1")

For nrp = 1 To sh.PivotTables.Count

 Set pivot = ActiveSheet.PivotTables(nrp)
    For Each pivot In sh.PivotTables
        Charts.Add
        ActiveChart.Location Where:=xlLocationAsObject, Name:=pivot.Parent.Name
    Next pivot
Next nrp

End Sub

Может кто-нибудь объяснить мне, что я делаю неправильно?

Любая помощь приветствуется.

Спасибо

Ник.

1 Ответ

0 голосов
/ 10 февраля 2019

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

Внутренний цикл For Each pivot In sh.PivotTables проходит по каждой сводной таблице, как и внешний цикл For nrp = 1 To sh.PivotTables.Count.Таким образом, вы получите 2 графика для каждой сводной таблицы.

Вместо использования Charts.Add я предлагаю использовать ChartObjects.Add, что создает встроенный график и позволяет контролировать размещение иsize.

Тогда вам также необходимо SetSourceData.

Пример может выглядеть так:

Sub AddPivotChart()
    Dim pivotTbl As PivotTable, ws As Worksheet

    Set ws = ThisWorkbook.Sheets("Sheet2")

    For Each pivotTbl In ws.PivotTables
        Dim chtObj As ChartObject
        Set chtObj = ws.ChartObjects.Add(50, 50, 200, 200) ' adjust as needed

        chtObj.Name = pivotTbl.Name
        chtObj.Chart.SetSourceData pivotTbl.TableRange1
    Next pivotTbl
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...