• ベストアンサー

エクセルの印刷ダイアログをSendkeysで操作したい。

エクセルのマクロ処理でフォーム上のボタンから 印刷ダイアログを呼び出して、そのダイアログを Sendkeysでもって両面印刷設定にし印刷させると いう処理を行いたいのですが上手くいきません。 印刷ダイアログが表示された段階で止まり(エラーで 止まるわけではなく単に処理が止まる)、その先の Sendkeysによる命令へ進みません。 Private Sub CommandButton1_Click() Application.Dialogs(xlDialogPrint).Show SendKeys "%r", True SendKeys "%k", True SendKeys "^{tab}", True SendKeys "^{tab}", True SendKeys "^{tab}", True SendKeys "%r", True SendKeys "{enter}", True SendKeys "+{tab}", True SendKeys "+{tab}", True SendKeys "+{tab}", True SendKeys "+{tab}", True SendKeys "{enter}", True SendKeys "+{tab}", True SendKeys "+{tab}", True SendKeys "+{tab}", True SendKeys "{enter}", True End Sub よくSendKeysは環境によって誤作動などが起こるので 使わない方がいいと言われますが、一度どのように 動くのか試してみたいと思っています。 ちなみに上のコードは当方のプリンタでの設定手順となります。 SendKeysで印刷ダイアログにキーを送ることは できないのでしょうか? 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

単純な Sub test() Application.Dialogs(xlDialogPrint).Show MsgBox ("Done!") End Sub というマクロを作って試してみましたが、印刷ダイアログを閉じない限り、メッセージボックスが現れないです。 と言うことは、印刷ダイアログを出した時点でマクロはそこで止まってしまい、その後の命令はダイアログが閉じないと実行されないということだと思うので、SendKeysは印刷ダイアログには送られないのでしょう。 他に方法がないか検索してみたのですが、 http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=11511;id=excel によると、 「EXCEL VBAからプリンタの設定を操作するのは、かなり困難なようです。」 らしいです。

Radar3
質問者

お礼

試作までして頂き有難うございました。 この手の質問はネット上でも山ほどあるのですが やはりエクセルから直接設定を調整するには かなりの知識が必要なようです。 フリーランスの他プログラムを用いて同様の 処理を行うやり方なども見つけたのですが、 複数の人間がそれぞれ異なるパソコンで 使うファイルの為、エクセルのみで完結させることが 前提でしたので、この方法は仕方なく諦めることに しました。 解決とまでは言えませんが、印刷ダイアログ表示前に 両面設定にする旨のメッセージを表示させることで 対処した次第です。 また何かありましたら宜しくお願いします。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 Sendkeys の代わりに、UWSCを使えば出来るのでは? Application.Dialogs で、ダイアログを出したら、後は、 UWSC のスクリプトを作っておいて、 Shell で、このUWSC.EXE を呼び出して、プリンタの設定させればよいと思います。 http://www.h7.dion.ne.jp/~umiumi/

Radar3
質問者

お礼

当方でもフリーランスの他プログラムを用いて同様の 処理を行うやり方などを見つけたのですが、 複数の人間がそれぞれ異なるパソコンで 使うファイルの為、エクセルのみで完結させることが 前提でしたので、この方法は仕方なく諦めることに しました。 解決とまでは言えませんが、印刷ダイアログ表示前に 両面設定にする旨のメッセージを表示させることで 対処した次第です。 また何かありましたら宜しくお願いします。

関連するQ&A

専門家に質問してみよう