Я пробовал множество решений и просматривал веб-чат больше часов. Может быть, один из вас может помочь.Excel VBA Print Freezes
У меня есть макрос, который выбирает все листы с определенной строкой в их имени, а затем печатает их. Если слишком много листов, оно зависает, и вы не можете разбить макрос для отладки, а Ctrl + Alt + Del - единственный выход. Замерзает в разных местах, каждый раз тоже ...
Мой исходный код:
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim x As Integer
For x = 1 To Worksheets.count
If VBA.InStr(Worksheets(x).Name, "Lateral Assessment") > 0 Then
With Worksheets(x).PageSetup
.Orientation = xlPortrait
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
Worksheets(x).PrintOut
End If
Next x
Application.ScreenUpdating = True
Application.EnableEvents = True
Я пытался, в других темах форума, следующее:
- Добавление DoEvents в цикле для позволяют системному времени обрабатывать
- Добавление таймера «Подождите», чтобы дать ему время для обработки
- Сначала прокрутка и настройка свойств страниц, а затем печать (он заканчивает цикл, чтобы установить количество страниц в сети, но замерзает в контуре печати, например «normal»
- Перемещено для добавления всех листов в массив, а затем отправки их как отдельного задания на печать (оно все еще зависает после 14-16 страницы)
Я также в какой-то момент добавил индикатор выполнения, который я использую во многих моих больших процессах, и вы можете видеть, как он прогрессирует по счету перед замораживанием на несогласованном листе. Кроме того, обратите внимание, что проблема возникает, даже если я запускаю ее за одну итерацию за раз из окна кода VBA, поэтому представляется, что она не связана с временем обработки (хотя нельзя быть уверенным в этом).
Мой текущий код:
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim x As Long, iTotal As Long, sSheets() As String
iTotal = -1
For x = 1 To Worksheets.count
If VBA.InStr(Worksheets(x).Name, "Lateral Assessment") > 0 Then
With Worksheets(x).PageSetup
.Orientation = xlPortrait
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
iTotal = iTotal + 1
ReDim Preserve sSheets(iTotal)
sSheets(iTotal) = Worksheets(x).Name
End If
Next x
If iTotal <> -1 Then
Sheets(sSheets).PrintOut Copies:=1, Collate:=True
End If
Application.ScreenUpdating = True
Application.EnableEvents = True
Любая идея, почему это происходит, и возможные решения, которые я попытался нету?
Будет PrintPreview замораживает его? 'Worksheets (x) .PrintOut' Если это так, кажется, проблема с принтером/драйвером. – PatricK
Предварительный просмотр печати не затормозит. Кроме того, это происходит независимо от принтера. Одна новая информация, которая произошла сегодня, заключается в том, что аналогичная функция печати, которая печатает в PDF, с помощью функции ExportAsFixedFormat err'd с runtime 1004, вероятно, из-за отсутствия памяти. Я предполагаю, что макрос выше имеет аналогичную проблему. –
На этом этапе я убежден, что я столкнулся с ограничением памяти на 2 ГБ для 32-битных приложений. Предварительный просмотр на самом деле МОЖЕТ заблокировать его, если есть достаточно страниц, но весь макрос отлично работает для небольших заданий. Поскольку это сетевой рабочий компьютер, которым я не являюсь администратором, мне придется иметь дело с лимитом 2 ГБ. Интересно, поставил ли я 10 секунд каждую пятую страницу, если это будет работать ... –