6

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 呼び出しについて、作成者が意図していることを行っていることを知っている人はいますか?

4

3 に答える 3

2

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

sub  test()

 activesheet.printout preview:= false

end sub

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

于 2012-10-04T16:17:38.587 に答える
1

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

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

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

于 2008-09-16T06:09:57.370 に答える
1

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

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

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

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

于 2008-09-22T14:17:52.660 に答える