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

編集:以下の回答は、これについてさらに詳しく説明しています (Excel ダイアログではなく Windows ダイアログである可能性がある) が、私の質問には答えていません。表示されないようにする方法をご存知の方はいらっしゃいますか?

編集:余分な調査をしていただきありがとうございます、ケビン。これが私が必要としているもののように見えます。そのような API コードを盲目的に受け入れたいかどうかはわかりません。これらの API 呼び出しについて、またそれらが作成者の主張どおりのことを行っていることについて知っている人はいますか?

役に立ちましたか?

解決

「印刷中」ダイアログというと、標準の印刷ダイアログ (プリンター、部数などの選択) ではなく、「現在 xxx を印刷中」ダイアログを意味していると思います。上記の例を取り上げて試してみると、それが私が見た動作です - 「印刷中...」が短く表示され、その後自動的に閉じられました。

制御しようとしているのは Excel に関連付けられているのではなく、Windows レベルの動作である可能性があります。制御可能な場合は、a) 無効にする、b) 印刷を実行する、c) 再度有効にする必要があります。コードが失敗すると、他のアプリケーションでこれが再度有効にされなくなるリスクがあります。

編集:この解決策を試してください: ExcelのPrintOutメソッドを使用するときに印刷ダイアログを防ぐにはどうすればよいですか. 。それはあなたが何を求めているのかを正確に説明しているようです。

他のヒント

印刷ダイアログを表示したくない場合は、次のようにマクロ テストを作成します。印刷ダイアログは表示されず、デフォルトのプリンターが検出されてすぐに印刷されます。

sub  test()

 activesheet.printout preview:= false

end sub

このマクロを実行すると、印刷ダイアログを表示せずに、現在アクティブなシートが印刷されます。

Kevin Haines がリンクした記事の API 呼び出しは、次のように [印刷] ダイアログを非表示にします。

  1. [印刷]ダイアログ ウィンドウのハンドルを取得します。
  2. 再描画しないようウィンドウにメッセージを送信します。
  3. ウィンドウを無効にすることで、再描画が強制的に行われなくなります。
  4. Windows にウィンドウを再描画するよう指示すると、ウィンドウが消えます。

控えめに言っても、それは単純化しすぎています。

API 呼び出しは安全ですが、アプリケーションが失敗した場合は、[印刷] ダイアログの画面更新が True に設定されていることを確認する必要があるでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top