Как предотвратить печать диалогов при использовании метода Excel PrintOut - PullRequest
5 голосов
/ 16 сентября 2008

Когда я использую метод 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 и о том, что они делают в соответствии с намерениями автора?

Ответы [ 3 ]

2 голосов
/ 04 октября 2012

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

sub  test()

 activesheet.printout preview:= false

end sub

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

1 голос
/ 22 сентября 2008

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

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

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

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

1 голос
/ 16 сентября 2008

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

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

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

...