ExcelのPrintOutメソッドを使用するときに印刷ダイアログを防ぐにはどうすればよいですか
-
09-06-2019 - |
質問
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
編集:以下の回答は、これについてさらに詳しく説明しています (Excel ダイアログではなく Windows ダイアログである可能性がある) が、私の質問には答えていません。表示されないようにする方法をご存知の方はいらっしゃいますか?
編集:余分な調査をしていただきありがとうございます、ケビン。これが私が必要としているもののように見えます。そのような API コードを盲目的に受け入れたいかどうかはわかりません。これらの API 呼び出しについて、またそれらが作成者の主張どおりのことを行っていることについて知っている人はいますか?
解決
「印刷中」ダイアログというと、標準の印刷ダイアログ (プリンター、部数などの選択) ではなく、「現在 xxx を印刷中」ダイアログを意味していると思います。上記の例を取り上げて試してみると、それが私が見た動作です - 「印刷中...」が短く表示され、その後自動的に閉じられました。
制御しようとしているのは Excel に関連付けられているのではなく、Windows レベルの動作である可能性があります。制御可能な場合は、a) 無効にする、b) 印刷を実行する、c) 再度有効にする必要があります。コードが失敗すると、他のアプリケーションでこれが再度有効にされなくなるリスクがあります。
編集:この解決策を試してください: ExcelのPrintOutメソッドを使用するときに印刷ダイアログを防ぐにはどうすればよいですか. 。それはあなたが何を求めているのかを正確に説明しているようです。
他のヒント
印刷ダイアログを表示したくない場合は、次のようにマクロ テストを作成します。印刷ダイアログは表示されず、デフォルトのプリンターが検出されてすぐに印刷されます。
sub test()
activesheet.printout preview:= false
end sub
このマクロを実行すると、印刷ダイアログを表示せずに、現在アクティブなシートが印刷されます。
Kevin Haines がリンクした記事の API 呼び出しは、次のように [印刷] ダイアログを非表示にします。
- [印刷]ダイアログ ウィンドウのハンドルを取得します。
- 再描画しないようウィンドウにメッセージを送信します。
- ウィンドウを無効にすることで、再描画が強制的に行われなくなります。
- Windows にウィンドウを再描画するよう指示すると、ウィンドウが消えます。
控えめに言っても、それは単純化しすぎています。
API 呼び出しは安全ですが、アプリケーションが失敗した場合は、[印刷] ダイアログの画面更新が True に設定されていることを確認する必要があるでしょう。