Неправильные поля отображаются в сводной таблице, созданной в Visual Basic - PullRequest
0 голосов
/ 14 мая 2018

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

Однако вместо заголовков столбцов таблицы я получаю записи из первой строки каждого столбца в виде полей.

Прикрепленный ниже фрагмент кода, который я использую, чтобы попытаться выполнить это, и ссылка на снимок экрана с фактическими полями, которые я получаю в сводной таблице, полями, которые я хочу, и небольшим фрагментом фактических данных таблицы. Примечание: 2 столбца в таблице скрыты из-за длинных строк и избыточности данных.

'Declare some variables to be used
Dim wsTarget As Worksheet
Dim rngSource As Range
Dim pc As PivotCache
Dim pt As PivotTable
Dim field As PivotField

'Set source and target sheet
Set rngSource = Sheets("MergedData").Range("Table1")
Set wsTarget = Sheets("PivotData")

'Delete all pivottables in the target sheet
For Each xPT In Worksheets("PivotData").PivotTables
    Worksheets("PivotData").Range(xPT.TableRange2.Address).Delete Shift:=xlUp
Next

'Create a PivotTable with the data from the previously created table
Set pc = ThisWorkbook.PivotCaches.Create(xlDatabase, rngSource, xlPivotTableVersion14)
Set pt = pc.CreatePivotTable(wsTarget.Range("A1"), "PivotTable1", , xlPivotTableVersion14)

'Set all columns and rows for the pivottable
Set field = wsTarget.PivotTables("PivotTable1").PivotFields("Date")
field.Orientation = xlColumnField

Set field = wsTarget.PivotTables("PivotTable1").PivotFields("ErrorCode")
field.Orientation = xlRowField

Set field = wsTarget.PivotTables("PivotTable1").PivotFields("Vehicle")
field.Orientation = xlRowField

Set field = wsTarget.PivotTables("PivotTable1").PivotFields("Vehicle")
field.Orientation = xlDataField

Изображение с поворотными полями и данными таблицы

Image with Pivottable fields and table data

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

1 Ответ

0 голосов
/ 14 мая 2018
Sheets("MergedData").Range("Table1")

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

Sheets("MergedData").ListObjects("Table1").Range 

вместо

...