#excel #vba #pdf
#excel #vba #PDF
Вопрос:
Я создаю несколько сотен отчетов в Excel и сохраняю их в формате PDF. Если я удалю процедуру сохранения в PDF, она будет проходить через все отчеты. Когда я добавляю подпрограмму обратно, она очень неустойчивая, иногда доводя ее до 20, иногда до 60, а иногда и до всех 250. При выходе выдает сообщение об ошибке памяти, которое отображается в виде белого поля плана. Я нажимаю Cntrl-C, чтобы скопировать это, а затем вставить в блокнот, чтобы увидеть сообщение об ошибке, которое является ошибкой памяти.
Я также пытался сохранить отчет в формате Jpg, но у меня такая же проблема с памятью.
Создаваемые PDF-файлы имеют размер около 186 КБ, файл Excel — 466 КБ. Я использую 64-разрядный Office 365 и имею 16 гигабайт оперативной памяти на моем компьютере и более 600 гигабайт свободного места на диске.
Ниже приведен код, который я использую для создания PDF-файлов, есть предложения?
Я просмотрел другие сообщения на эту тему, но не увидел ответа, и всем им было несколько лет.
Sub CreatePDFSave(sFileName As String)
Dim sPathFile As String
Dim wks As Worksheet
Set wks = Sheet5
sPathFile = Environ$("UserProfile") amp; "Documents"
sFileName = sPathFile amp; sFileName
wks.Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
sFileName amp; ".pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
Set wks = Nothing
End Sub
Комментарии:
1. Являются ли эти несколько сотен отчетов отдельным файлом? Если да, убедитесь ли вы, что каждый из них закрыт после сохранения в формате pdf? Кроме того, какие еще шаги вы предприняли для открытия файлов?
2. Это один файл, в котором выполняются запросы к SQL для создания требуемого отчета. После создания каждого отчета создается необходимый PDF-файл. Если я удалю часть создания PDF, все выполняется до конца. Мы добавили «При ошибке goto 0» в подпрограмму PDF, и, похоже, это работает. Спасибо за ответ.
3. Вы удаляете / очищаете
ActiveSheet
отчет после каждого SQL-запроса? Вы также добавляетеDoEvents
перед / после каждого SQL-запроса для Excel? Возможно, также захочется отключить события и перевести вычисления в ручной режим, чтобы Excel не потреблял память для обновления данных.