Добрый день
Подскажите, пож, как ускорить найденный в интернете макрос, который преобразует CSV в XLSB. Работает отлично, но медленно: 250 мб 3000 файлов пересохраняет около 30 мин. Разными путями пытался его ускорить. И получил неожиданные результаты.
Если сохранять в xlsx, то быстрее на 10-20% чем xlsb (ожидал наоборот). При Application.ScreenUpdating = False – каждый раз возникает тот или иной «сбой». Чаще всего работа макроса прерывается из-за того, что Excel ожидает ответа на предупреждение: «Сохранение в этом формате возможно приведет к потери части функциональности» - точно не процитирую, нажал, не подумав больше не показывать и теперь макрос если прерывается, то без предупреждений. Каждый раз на разных файлах прерывается. Хорошо бы на одном и том же, тогда причина в конкретном csv. Или вылетает предупреждение что не хватает памяти. И один файл как минимум отсутствует в результатах обработки (видимо тот на котором произошла заминка). Но самое удивительное, время обработки файлов при отключении обновления экрана не уменьшается, а увеличивается. Без Application.ScreenUpdating = False, все файлы нормально обрабатываются и никаких предупреждений, заминок, ожиданий моих действий... не появляется и еще время обработки сокращается
Буду очень благодарен за любые пути ускорения данного макроса
Скриншоты прилагаю, но это происходит очень редко. в основном останавливается макрос без ничего и только при Application.ScreenUpdating = False
Код |
---|
Sub CommandButton2_Click()
'Application.Calculation = xlCalculationManual
'Application.ScreenUpdating = False 'приводит к остановке макроса: "сохранение в этом формате приводит к потере данных продоложить?"
'так же была остановка с недостатком памяти, но что жд что оперативы много было свободной, также один файл не сохранился и время выполнения макроса увеличивалось на 50%
'Application.DisplayStatusBar = False
'Application.EnableEvents = False
'ActiveSheet.DisplayPageBreaks = False
'Application.DisplayAlerts = False 'подавляет почти все системные сообщения Excel, все равно останавливается с пустым окном
Dim CSVfolder As String, _
XlsFolder As String, _
fname As String, _
wBook As Workbook
CSVfolder = "D:\csv\"
XlsFolder = "D:\Charts\"
fname = Dir(CSVfolder & "*.csv")
Do While fname <> ""
Set wBook = Workbooks.Open(CSVfolder & fname, Format:=6, Delimiter:=",")
'wBook.SaveAs XlsFolder & Replace(fname, ".csv", ""), FileFormat:=50 Эта строка приводила к тому что файлы типа trk.kz.csv преобразовывались в trk.kz с расширением.kz
wBook.SaveAs XlsFolder & Replace(fname, ".csv", ".xlsb"), FileFormat:=50 'FileFormat:=50 сохраняет в xlsb, 51 xlsx, 52 xlsm...
'On Error Resume Next 'добавил строку чтобы прекратилось прерывание выполнения макроса, из-за того что выскакивает предупреждение что потеря части данных, не хватает памяти и т.д.
wBook.Close False 'равнозначно wBook.Close SaveChanges:=False
'wBook.Close True
'On Error Resume Next 'добавил строку чтобы прекратилось прерывание выполнения макроса, из-за того что выскакивает предупреждение что потеря части данных, не хватает памяти и т.д.
fname = Dir
Loop
'Application.Calculation = xlCalculationAutomatic
'Application.ScreenUpdating = True
'Application.DisplayStatusBar = True
'Application.EnableEvents = True
'ActiveSheet.DisplayPageBreaks = True
'Application.DisplayAlerts = True
End Sub
|