Как создать сводную таблицу с несколькими строковыми полями, используя VBA? - PullRequest
0 голосов
/ 28 марта 2019

Я хочу создать сводную таблицу с несколькими строковыми полями. Хотя эти строчные поля необходимо изменить в соответствии с данными, введенными в таблицу Excel.

Я попытался установить переменные и использовать команды «with» и «for», например, в следующем коде.

    Option Explicit 
Private Sub PivotTable()

        Dim Wsheet      As Worksheet, Wsheet2   As Worksheet
        Dim File        As Workbook
        Dim PvtCache    As PivotCache
        Dim Pvtbl       As PivotTable
        Dim RLast       As Double
        Dim i           As Variant, X            As Variant

        Set File = ThisWorkbook
        Set Wsheet = Sheets("Data")
        'Create sheet for pivot table 
        Set Wsheet2 = Sheets.Add(After:=Wsheet)
        Wsheet2.Name = "PivotTable"     

        Set PvtCache = File.PivotCaches.Create(SourceType:=xlDatWsheetse, SourceData:=Wsheet.Range("A1:D45"))
        Set Pvtbl = Wsheet2.PivotTables.Add(PivotCache:=PvtCache, TableDestination:=Wsheet2.Range("A3"), TableName:="Manual_Bordo")

            With Pvtbl
            'setting rows fields
            Set Wsheet = Sheets("Data")
            RLast = Wsheet.Cells(Rows.Count, "F").End(xlUp).Row 'Type the row fields in column "F".
            For i = 1 To RLast
                Set X = Wsheet.Range("F" & i)
                With .PivotFields(X)                            'Here i get  the error 1004
                    .Orientation = xlRowField
                    .Position = i
                End With

            Next
            'setting pivot Data
                With .PivotFields("Size")
                    .Orientation = xlDataField
                    .Position = i
                    .Function = xlSum
                    .NumberFormat = "#.##0,0"
                    .Name = "Size"
                End With
            Next            
        End With
    Application.DisplayAlerts = True
End Sub

Но вместо этого я получаю сообщение об ошибке 1004: не удается получить свойство pivotfields класса сводной таблицы (извините, если это не имеет смысла, но мне пришлось перевести диалоговое окно).

1 Ответ

0 голосов
/ 29 марта 2019

Вы используете объект, где вам просто нужна строка. (Я также переименую X, чтобы сделать его более понятным):

Dim rowLabel as String
...
rowLabel = Wsheet.Range("F" & i)
With .PivotFields(rowLabel)
    ...
...