Доброго времени суток.
Задача, которая стоит передо мной - сверка двух отчетов. Отчеты выгружены в файлы Excel.
Я разработал макрос, посредством которого указываются оба файла. Происходит чтение файлов, обработка данных, получение итогового массива данных.
Полученный массив данных, я вывожу на лист и строю сводную таблицу, показывающую разницы в нужных разрезах.
Часть подразделений, данные которых в итоговом массиве не превышают 10k строк, обрабатываются корректно.
А вот когда итоговый массив большой (проблемы начались на 300 k) выскакивает ошибка
"Run-time error 13" Type mismatch.
Проблемная строка:
Код |
---|
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=DataRng, Version:=xlPivotTableVersion12).CreatePivotTable TableDestination:=wsPvtTbl.Range("A2"), TableName:="PivotTable1", DefaultVersion:=xlPivotTableVersion12 |
Думаю, дело в DataRng. Так как все остальное константы. Но почему на одних данных все хорошо, а на большем объеме возникает проблема, не пойму.
Посоветуйте / подскажите что не так. В чем загвоздка.
Полный код создания сводной таблицы:
Скрытый текст |
---|
Код |
---|
Dim PvtTbl As PivotTable
Dim wsData As Worksheet
Dim DataRng As Range
Dim PvtTblCache As PivotCache
Dim wsPvtTbl As Worksheet
Dim pvtFld As PivotField
Set wsData = Worksheets("Template" Set wsPvtTbl = Worksheets("PivotTable")
' очищаем лист
wsData.Select
wsData.Cells.Select
Selection.ClearContents
' заносим данные из массива на лист
Array2worksheet wsData, Аrray_1, Array("Таб. номер", "ФИО", "Группа", "Источник", "Разбивка", "Значение" )
' не знаю как снять выделение. Канает выбор одной ячейки
wsData.Range("A1".Select) For Each PvtTbl In wsPvtTbl.PivotTables
PvtTbl.TableRange2.Clear
Next PvtTbl
Set DataRng = wsData.Range("A1:F" & VsegoStrok)
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=DataRng, Version:=xlPivotTableVersion12).CreatePivotTable
TableDestination:=wsPvtTbl.Range("A2", TableName:="PivotTable1", DefaultVersion:=xlPivotTableVersion12
Set PvtTbl = wsPvtTbl.PivotTables("PivotTable1")
PvtTbl.ManualUpdate = True
'Определяем строки, колнки
Set pvtFld = PvtTbl.PivotFields("ФИО" )
pvtFld.Orientation = xlRowField
Set pvtFld = PvtTbl.PivotFields("Группа")
pvtFld.Orientation = xlColumnField
pvtFld.Position = 1
Set pvtFld = PvtTbl.PivotFields("Источник")
pvtFld.Orientation = xlColumnField
With PvtTbl.PivotFields("Значение")
.Orientation = xlDataField
.Function = xlSum
.NumberFormat = "#,##0"
.Position = 1 End With wsPvtTbl.PivotTables("PivotTable1".PivotFields("Группа").ShowDetail = False
PvtTbl.ManualUpdate = False |
|