Как предотвратить печать диалогового окна при использовании метода Excel PrintOut

StackOverflow https://stackoverflow.com/questions/67219

Вопрос

Когда я использую метод PrintOut для печати объекта Worksheet на принтере, отображается диалоговое окно «Печать» (показывающее имя файла, целевой принтер, напечатанные страницы и кнопку «Отмена»), даже если я установил DisplayAlerts = False.Приведенный ниже код работает в макросе Excel, но то же самое происходит, если я использую этот код в приложении VB или VB.Net (с изменениями ссылок, необходимыми для использования объекта Excel).

Public Sub TestPrint()
Dim vSheet As Worksheet

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    Set vSheet = ActiveSheet
    vSheet.PrintOut Preview:=False

    Application.DisplayAlerts = True
    Application.ScreenUpdating = True

End Sub

РЕДАКТИРОВАТЬ:Ответ ниже проливает больше света на этот вопрос (что это может быть диалоговое окно Windows, а не диалоговое окно Excel), но не отвечает на мой вопрос.Кто-нибудь знает, как запретить его отображение?

РЕДАКТИРОВАТЬ:Спасибо за дополнительное исследование, Кевин.Очень похоже, что это то, что мне нужно.Просто не уверен, что хочу слепо принимать такой код API.Есть ли у кого-нибудь еще какие-либо сведения об этих вызовах API и о том, что они делают то, что задумал автор?

Это было полезно?

Решение

Когда вы говорите «Диалоговое окно «Печать», я предполагаю, что вы имеете в виду диалоговое окно «Теперь печатаем xxx on», а не стандартное диалоговое окно печати (выбор принтера, количество копий и т. д.).Взяв приведенный выше пример и опробовав его, я увидел именно такое поведение: сообщение «Сейчас печатается...» отображалось на короткое время, а затем автоматически закрывалось.

То, что вы пытаетесь контролировать, может быть не связано с Excel, а быть поведением на уровне Windows.Если им можно управлять, вам необходимо а) отключить его, б) выполнить печать, в) снова включить.Если ваш код даст сбой, существует риск, что он не будет повторно включен для других приложений.

РЕДАКТИРОВАТЬ:Попробуйте это решение: Как предотвратить печать диалогового окна при использовании метода Excel PrintOut.Кажется, это точно описывает то, что вам нужно.

Другие советы

Если вы не хотите отображать диалог печати, просто выполните проверку макроса следующим образом;он не будет отображать диалог печати, обнаружит принтер по умолчанию и немедленно напечатает.

sub  test()

 activesheet.printout preview:= false

end sub

Запустите этот макрос, и он напечатает активный в данный момент лист без отображения диалогового окна печати.

Вызовы API в статье, на которую ссылается Кевин Хейнс, скрывают диалоговое окно «Печать» следующим образом:

  1. Получите дескриптор диалогового окна «Печать».
  2. Отправьте сообщение окну, чтобы оно не перерисовывалось.
  3. Сделайте окно недействительным, что приведет к перерисовке, которая никогда не происходит.
  4. Скажите Windows перерисовать окно, в результате чего оно исчезнет.

Это мягко говоря упрощенно.

Вызовы API безопасны, но вам, вероятно, захочется убедиться, что для обновления экрана для диалогового окна «Печать» установлено значение «Истина», если ваше приложение выйдет из строя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top