|
Type mysmatch при создании большого кол-ва файлов с пивотами
|
|||
---|---|---|---|
#18+
Задача следующая: есть папка в которой лежат файлы с одинаковой структурой, файлов порядка 40 - размер от 7мб до 70мб, в сумме где-то гиг. Нужно зайти в каждый из файлов и сделать в нем 4 сводные таблицы. Эксель 2010, но обрабатываю файлы формата 2003. Проблема: после того как обработано файлов на 150 Мб (установлено опытным путем) программа падает с ошибкой Run-time error '13': Type mismatch. Падает на строке Set PTCache1 = wbopen.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=wbopen.Sheets(1).Range("A1:AK" & t)) Я думаю, что переполняется какой-то кэш/память/хз. Кто-нибудь сталкивался? Есть идеи как обойти? Что надо очищать и как? Собственно код Sub KM_pivotsxxxxx() Dim strFile As String Dim strPath As String Dim colFiles As New Collection Dim i As Integer Dim date1 As Date Dim date2 As String Application.DisplayAlerts = False 'Где бегаем strPath = "\\rsb-assasp1\SASUSERS\XXXXXXXXX\KM_IGK\_km\" strFile = Dir(strPath) While strFile <> "" colFiles.Add strFile strFile = Dir Wend 'Полетели по файлам If colFiles.Count > 0 Then For i = 1 To colFiles.Count Set wbopen = Workbooks.Open(strPath & colFiles(i)) wbopen.Sheets(1).Activate t = 0 F = 1 While wbopen.Sheets(1).Cells(F, 1) <> "" t = F F = F + 1 Wend Set PTCache1 = wbopen.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=wbopen.Sheets(1).Range("A1:AK" & t)) ' ОШИБКА ЛЕЗЕТ ТУТ !!!!!!!!!!!!!! Set oPT1 = PTCache1.CreatePivotTable(Sheets("SVOD_1").[A3], "SVOD_1", True) oPT1.SaveData = False With oPT1 .PivotFields("Eia eeeaioneiai iaiaa?a?a").Orientation = xlRowField .PivotFields("Oei i?iaoeoa").Orientation = xlRowField End With With oPT1 .AddDataField oPT1.PivotFields("Eiee?anoai nnoa"), "Eie-ai auaa?", xlSum .AddDataField oPT1.PivotFields("I?eciae FPD"), "Eie-ai FPD", xlSum .AddDataField oPT1.PivotFields("I?eciae DR4"), "Eie-ai DR4", xlSum .AddDataField oPT1.PivotFields("I?eciae 90plus"), "Eie-ai NPL90+", xlSum .AddDataField oPT1.PivotFields("osz_npl90"), "Noiia i?in?i?ee INC ii NPL90+", xlSum End With oPT1.CalculatedFields.Add "Aiey FPD", "='I?eciae FPD'/'Eiee?anoai nnoa'", True oPT1.PivotFields("Aiey FPD").Orientation = xlDataField oPT1.CalculatedFields.Add "Aiey DR4", "='I?eciae DR4'/'Eiee?anoai nnoa'", True oPT1.PivotFields("Aiey DR4").Orientation = xlDataField oPT1.CalculatedFields.Add "Aiey NPL90+", "='I?eciae 90plus'/'Eiee?anoai nnoa'", True oPT1.PivotFields("Aiey NPL90+").Orientation = xlDataField With oPT1 .TableStyle2 = "" .InGridDropZones = True .RowAxisLayout xlTabularRow End With With oPT1 .PivotFields("Noiia ii iie? Aiey FPD").NumberFormat = "0.00%" .PivotFields("Noiia ii iie? Aiey DR4").NumberFormat = "0.00%" .PivotFields("Noiia ii iie? Aiey NPL90+").NumberFormat = "0.00%" End With Set oPT2 = PTCache1.CreatePivotTable(Sheets("SVOD_2").[A3], "SVOD_2", True) oPT2.SaveData = False With oPT2 .PivotFields("Eia eeeaioneiai iaiaa?a?a").Orientation = xlRowField .PivotFields("field086").Orientation = xlRowField End With With oPT2 .AddDataField oPT2.PivotFields("Eiee?anoai nnoa"), "Eie-ai auaa?", xlSum .AddDataField oPT2.PivotFields("I?eciae FPD"), "Eie-ai FPD", xlSum .AddDataField oPT2.PivotFields("I?eciae DR4"), "Eie-ai DR4", xlSum .AddDataField oPT2.PivotFields("I?eciae 90plus"), "Eie-ai NPL90+", xlSum .AddDataField oPT2.PivotFields("osz_npl90"), "Noiia i?in?i?ee INC ii NPL90+", xlSum .AddDataField oPT2.PivotFields("Aiey FPD"), "Noiia ii iie? Aiey FPD", xlSum .AddDataField oPT2.PivotFields("Aiey DR4"), "Noiia ii iie? Aiey DR4", xlSum .AddDataField oPT2.PivotFields("Aiey NPL90+"), "Noiia ii iie? Aiey NPL90+", xlSum End With With oPT2 .TableStyle2 = "" .InGridDropZones = True .RowAxisLayout xlTabularRow End With With oPT2 .PivotFields("Noiia ii iie? Aiey FPD").NumberFormat = "0.00%" .PivotFields("Noiia ii iie? Aiey DR4").NumberFormat = "0.00%" .PivotFields("Noiia ii iie? Aiey NPL90+").NumberFormat = "0.00%" End With Set oPT3 = PTCache1.CreatePivotTable(Sheets("SVOD_3").[A3], "SVOD_3", True) oPT3.SaveData = False With oPT3 .PivotFields("Eia aiiioena").Orientation = xlRowField .PivotFields("Eia eeeaioneiai iaiaa?a?a").Orientation = xlRowField End With With oPT3 .AddDataField oPT3.PivotFields("Eiee?anoai nnoa"), "Eie-ai auaa?", xlSum .AddDataField oPT3.PivotFields("I?eciae FPD"), "Eie-ai FPD", xlSum .AddDataField oPT3.PivotFields("I?eciae DR4"), "Eie-ai DR4", xlSum .AddDataField oPT3.PivotFields("I?eciae 90plus"), "Eie-ai NPL90+", xlSum .AddDataField oPT3.PivotFields("osz_npl90"), "Noiia i?in?i?ee INC ii NPL90+", xlSum .AddDataField oPT3.PivotFields("Aiey FPD"), "Noiia ii iie? Aiey FPD", xlSum .AddDataField oPT3.PivotFields("Aiey DR4"), "Noiia ii iie? Aiey DR4", xlSum .AddDataField oPT3.PivotFields("Aiey NPL90+"), "Noiia ii iie? Aiey NPL90+", xlSum End With With oPT3 .TableStyle2 = "" .InGridDropZones = True .RowAxisLayout xlTabularRow End With With oPT3 .PivotFields("Noiia ii iie? Aiey FPD").NumberFormat = "0.00%" .PivotFields("Noiia ii iie? Aiey DR4").NumberFormat = "0.00%" .PivotFields("Noiia ii iie? Aiey NPL90+").NumberFormat = "0.00%" End With Set oPT4 = PTCache1.CreatePivotTable(Sheets("SVOD_4").[A3], "SVOD_4", True) oPT4.SaveData = False With oPT4 .PivotFields("Eia aiiioena").Orientation = xlRowField End With With oPT4 .AddDataField oPT4.PivotFields("Aiey FPD"), "Noiia ii iie? Aiey FPD", xlSum .AddDataField oPT4.PivotFields("Aiey DR4"), "Noiia ii iie? Aiey DR4", xlSum .AddDataField oPT4.PivotFields("Aiey NPL90+"), "Noiia ii iie? Aiey NPL90+", xlSum End With With oPT4.DataPivotField .Orientation = xlRowField .Position = 2 End With With oPT4 .TableStyle2 = "" .InGridDropZones = True .RowAxisLayout xlTabularRow End With With oPT4 .PivotFields("Noiia ii iie? Aiey FPD").NumberFormat = "0.00%" .PivotFields("Noiia ii iie? Aiey DR4").NumberFormat = "0.00%" .PivotFields("Noiia ii iie? Aiey NPL90+").NumberFormat = "0.00%" End With wbopen.Save wbopen.Close Next i End If MsgBox ("That's all") End Sub Т.е. вроде я всегда беру только данные и все пивоты висят на одном кеше, но видимо что-то копится. И oPT1.SaveData = False стоит. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2012, 19:30 |
|
Type mysmatch при создании большого кол-ва файлов с пивотами
|
|||
---|---|---|---|
#18+
Можно конечно перед Код: vbnet 1.
очищать все объектные переменные типа Код: vbnet 1.
. А вообще я бы посоветовал еще Код: vbnet 1.
в самом верху модуля и явное объявление и создание всех объектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2012, 02:03 |
|
|
start [/forum/topic.php?fid=60&fpage=84&tid=2158003]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 34ms |
total: | 154ms |
0 / 0 |