Следующий код работает хорошо в том смысле, что не возникает ошибок времени выполнения, а сводные таблицы создаются с правильными данными и размещаются в правильном месте.
Однако список предметов свернут.
Часть кода состоит из:
- чтение заголовков столбцов из массива
- идентифицирует заголовки столбцов, которые могут быть расположены случайным образом в диапазоне
- для каждого столбца, построить одномерную (то есть отдельное поле) сводную таблицу
- разместить сводную таблицу в данном месте
- показать ВСЕ предметы + их количество
A) с использованием SHOWDETAIL = True
Б) запись макроса и «клонирование» кода
For Each headerCell In wSh.Range("Ctl_Headers")
Set sceRange = wSh.Range(headerCell.Value)
sceRange.Activate
fRow = sceRange.Row
lRow = sceRange.Cells.SpecialCells(xlCellTypeLastCell).Row
fCol = sceRange.Column
lCol = fCol - 1 + sceRange.Columns.Count
Set pivCache = wBk.PivotCaches.Add(xlDatabase, wSh.Range(wSh.Cells(fRow, fCol), wSh.Cells(lRow, lCol)))
Set pivTable = wSh.PivotTables.Add(PivotCache:=pivCache, TableDestination:=wSh.Range(wSh.Cells(1, nrindex), wSh.Cells(1, nrindex)), TableName:="piv" & headerCell.Value)
pivTable.PivotFields(headerCell.Value).Orientation = xlRowField
pivTable.AddDataField pivTable.PivotFields(headerCell.Value), "Count " & headerCell.Value, xlCount
pivTable.PivotFields(headerCell.Value).ShowDetail = True
nrindex = nrindex + 4
Next headerCell