Práce s kontingenční tabulkou ve VBA


Sub CreatePivotTable()
    Dim wsNewSheet As Worksheet     ' Objektová proměnná pro nový list
    Dim pvtCache As PivotCache      ' Objektová proměnná pro PivotCache
    Dim pvtTable As PivotTable      ' Objektová proměnná pro PivotTable
    Dim strFirstCell As String      ' Proměnná pro první buňku PivotTable
    Dim strDataSource As String     ' Proměnná pro odkaz na zdrojová data

    strDataSource = "TestingTable!" & ThisWorkbook.Sheets("TestingTable").Range("A1").CurrentRegion.Address
    Debug.Print strDataSource
    
    Set wsNewSheet = Sheets.Add     ' Přidání nového listu
    strFirstCell = wsNewSheet.Name & "!" & wsNewSheet.Range("A3").Address(ReferenceStyle:=xlR1C1)
    
    ' Definování PivotCache, nad kterým vytváříme PivotTable (PT)
    Set pvtCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=strDataSource)
    Set pvtTable = pvtCache.CreatePivotTable(TableDestination:=strFirstCell, TableName:="PivotTable1")
    
    ' Volání procedury, která vytvoří v PT souhrn dat
    Call AddingPivotFields
    
    ' Uklizení v proměnných
    Set wsNewSheet = Nothing
    Set pvtCache = Nothing
    Set pvtTable = Nothing
End Sub

Sub AddingPivotFields()
    Dim pvtTable As PivotTable                                          ' Objektová proměnná pro PivotTable (PT)
    Set pvtTable = ActiveSheet.PivotTables("PivotTable1")               ' Uložení PT do proměnné
    pvtTable.ManualUpdate = True                                        ' Pro zrychlení vypneme automatické přepočty
    
    With pvtTable
        .PivotFields("COUNTRY").Orientation = xlPageField               ' Vložení pole COUNTRY do filtru sestavy
        .PivotFields("BRAND CATEGORY").Orientation = xlColumnField      ' Vložení pole BRAND CATEGORY do sloupcových polí
        .PivotFields("CITY").Orientation = xlRowField                   ' Vložení pole CITY do řádkových polí
        .PivotFields("CITY").Position = 1                               ' Kdyby v řádkových polích bylo více polí, tak určujeme pozici
        .PivotFields("ORDERED QTY (PAL)").Orientation = xlDataField     ' Definice toho, jaké pole bude v datové části PT
        .PivotFields("ORDERED QTY (PAL)").NumberFormat = "#,##0"        ' Formát pole
    End With
    
    pvtTable.ManualUpdate = False
End Sub

Sub DeletePivotTable()
    ActiveSheet.PivotTables("PivotTable1").TableRange2.Clear
End Sub