powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Type mysmatch при создании большого кол-ва файлов с пивотами
3 сообщений из 3, страница 1 из 1
Type mysmatch при создании большого кол-ва файлов с пивотами
    #37696588
litegreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача следующая: есть папка в которой лежат файлы с одинаковой структурой, файлов порядка 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 стоит.
...
Рейтинг: 0 / 0
Type mysmatch при создании большого кол-ва файлов с пивотами
    #37698285
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно конечно перед
Код: vbnet
1.
Next i

очищать все объектные переменные типа
Код: vbnet
1.
Set PTCache1 = Nothing

. А вообще я бы посоветовал еще
Код: vbnet
1.
Option Explicit

в самом верху модуля и явное объявление и создание всех объектов.
...
Рейтинг: 0 / 0
Type mysmatch при создании большого кол-ва файлов с пивотами
    #37698290
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может программа валтися на одном и том же файле? Что если отследить на каком и попробовать его убрать из директории?
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Type mysmatch при создании большого кол-ва файлов с пивотами
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]