Не хватает памяти при создании нескольких PDF-файлов с помощью Excel vba

#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 не потреблял память для обновления данных.