[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロで印刷、プリンタの選択』(sato)
マクロで印刷する際に、印刷のダイアログを表示させて、プリンタを選択させたいです。 ネットワーク上の複数のプリンタから適当なものを手動で選択するためです。
For i = 1 to 2 IF i = 1 Then Application.Dialogs(xlDialogPrint).Show Else Sheets("Sheet1").PrintOut End If Next i
これを実行すると、最初の印刷のときだけダイアログを表示させ、 2回目に印刷するときはダイアログを表示させずに印刷します。
ここまではいいのですが、このままだと最初にダイアログを表示したときに、 印刷を中止しようとしてキャンセルを押しても、2枚目が印刷されます。
ダイアログでキャンセルが押されたときにループを抜けるには、 どのようにしたら良いでしょうか?
Dim Chk_Prn As Boolean ってしといて
Chk_Prn = Application.Dialogs(xlDialogPrint).Show ってしとくと印刷したときはChk_PrnにTrueが、キャンセルしたときはFalseが返るよ。
以下ヘルプからの引用
>Dialog.Show メソッド
>戻り値 > ブール型 (Boolean) の値です。組み込みダイアログ ボックスで、ユーザーが [OK] をクリックをした場合には True を返し、 > [キャンセル] をクリックをした場合には False を返します。
satoさんのご指摘で変数名を修正
(春日野馨)
これは同じものを2枚印刷するのでしょうか? もしそうだとしたら、Copiesに2を渡してあげるだけでも?
Sub test() Application.Dialogs(xlDialogPrint).Show , , , 2 End Sub
(momo)
春日野馨さん、適切なご回答ありがとうございました。 希望通りのことができました。
(後で誰かがこのコードを参考にされる場合のために) 少しだけツッコミをさせていただくと、 宣言した変数名と使っている変数名が違っているようですが・・
momoさん、追加のご回答ありがとうございました。 質問の言葉不足で申し訳ありません。
質問の主旨はあくまでダイアログボックスをキャンセルしたときの処理で、 例にあげたコードは簡略化したものです。
実際にはあて先を変更しながらエクセルで差込印刷をする予定です。 しかし、そのような記述の仕方があることは知りませんでした。 今後参考にさせていただきます。 (sato)
食事しながらで失礼します。
このダイアログオブジェクト、ダイアログなんだから、入力された情報だけ取得してくれれば 良いのですが、処理(この場合は、印刷処理)までしてしまいますねえ。 私の評価は、出来の悪いオブジェクトです。 検索や置換のダイアログだって、検索や置換条件だけ取得できればよいのにねえ。 検索や置換は、自分で出来ますからねえ!!
私の会社では、これは、反面教師としてよく取り上げます。私が・・・。
プリンターの選択だけなら、
ans = Application.Dialogs(xlDialogPrinterSetup).Show
こんな方法もあります。OKボタンでActiveprinterに選択プリンターが 設定されます。これだって、厳密に言えば、お節介処理をしていますが、 比較的使いやすいですよ
試してみてください
キャンセルの件は、以前、質問された時は、印刷中のキャンセルを表示させないで 自分でこの機能を自作(何かのキーが押されたら 印刷中止にする等という仕様)したら なんて投稿したことがあります。
ichinose
ichinoseさん、追加のコメントありがとうございます。 土・日はこのサイトを開いていなかったので、お返事が送れたことをお詫びします。
>ans = Application.Dialogs(xlDialogPrinterSetup).Show
使いやすそうなので、こちらを使わせていただくこととしました。 どうもありがとうございました。 (sato)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.