• ベストアンサー

エクセルの印刷ダイアログを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

  • EXCEL VBA Sendkeys {TAB}

    済みません、EXCELのマクロで自動でタブ移動が出来なく困っています。 いろいろ参考にして作ってみましたが、Sendkeysがセルに対して動作していないようです。 ご教授をお願いします。 Private Sub Tab_Count_Click() Worksheets("音楽リスト").Activate Range("A4:AF8").Select For i = 1 To 3 SendKeys "{TAB}", True MsgBox "OK" Next End Sub

  • EXCEL VBA sendkeysについて

    マクロ Sub PRT() ・・・・・・・ sendkeys "%FP",TRUE <- ここで プリンター指定、両面指定 等を手動で設定します MSGBOX " 終了" End Sub EXCEL2003以前では メッセージ" 終了" を表示せず 印刷設定画面が表示されましたが EXCEL2007以降は 印刷設定画面を表示せず メッセージ" 終了"が表示され 印刷設定が 変更できなくなりました。 どなたか 対処方法を教えて頂けないでしょうか?

  • ExcelマクロのSendkeysで処理途中に次のキーが送られる

    Excelのマクロから他ソフトのデータを取り入れています。 Sendkeysを使ってソフトのページを切替えたいんですが、ページが切り替わらないうちにページ表示後用のキーが立て続けに送られてしまい旨くいきません。 今やっているのは、起動済みオフラインのIEでHP上の目次からリンクのページ内容をつぎつぎシートへ写す処理です。 SendKeys "{tab}", True    でHPの次行の目次に移って SendKeys "{enter}", True  でページを開いて SendKeys "^{a}", True    全て選択 SendKeys "^{c}", True    コピー この後Excelのシートにテキストで張付ける。 で、IEに戻ってまた"{Tab}"で次行へ移って・・ ところが2番目の"{enter}"で新ページが開き終わらないうちに3,4番目のキーが送られてしまう様です。 ページが開き終わってから次のキーを送るにはどうすればいいでしょうか?

  • Excel VBAを使って給紙方法を変更する(キーストローク使用)

    ExcelのVBAを使って印刷するものによって給紙方法を変えたいと思っています。 調べてみたところ'SendKeysステートメントを使うと設定できそうだったので、下記のような命令文を作ってみたのですがうまく動きません。 どなたか詳しい方いらっしゃいましたら教えていただけないでしょうか? OS:WindowsXP 使用ソフト:Microsoft Excel2003 使用プリンタ:NEC PR-2860N 【コマンドボタン】 本書印刷 → 印刷範囲:「一枚目」(あらかじめ設定してある名前)  給紙方法:自動  控え印刷 → 印刷範囲:「二枚目」        給紙方法:ホッパー2 Private Sub 控え印刷_Click() With ActiveSheet.PageSetup .PrintArea = "二枚目" End With MyPrinterSet ActiveSheet.PrintOut End Sub ―――――――――――――――――――――――――――――― Private Sub 本書印刷_Click() With ActiveSheet.PageSetup .PrintArea = "一枚目" End With MyPrinterSet2 ActiveSheet.PrintOut End Sub ――――――――――――――――――――――――――――――― Private Sub MyPrinterSet() 'SendKeysステートメントでプリンタ設定 '自動給紙から手差しへ変更 ActiveSheet.Select SendKeys "%FU"    'Excel画面でファイル(F)、ページ設定... SendKeys "%O"    ‘オプション SendKeys "{TAB 8}"  ‘一番端の[メイン]のタブに合わせる SendKeys "{RIGHT}" ‘一つ右の[用紙]タブへ移動 SendKeys "%S"    ‘給紙方法選択 SendKeys "{DOWN 2}" 'ホッパー2に設定 SendKeys "{ENTER}"  SendKeys "{TAB 5}" ‘[用紙]タブを選択 SendKeys "{LEFT}" ‘一つ左の[メイン]タブへ移動 SendKeys "{ENTER 2}"  ―――――――――――――――――――――――――――――― End Sub Private Sub MyPrinterSet2() 'SendKeysステートメントでプリンタ設定 '例、EPSON LP-****を手差しから自動へ変更 ActiveSheet.Select SendKeys "%FU" 'Excel画面でファイル(F)、ページ設定... SendKeys "%O" SendKeys "{TAB 4}" ‘初期値へ戻すを選ぶ SendKeys "{ENTER 4}"  End Sub ――――――――――――――――――――――――――――――

  • 【sendkeysメソッドが動かずに苦慮しております】

    【sendkeysメソッドが動かずに苦慮しております】 OS:2000 Excel:2003 VB:6.5 こんにちは。 sendkeysメソッドが動かずに苦慮しております。 ネットでいろいろ調べてみましたが、やはり正常に動かすのは難しい様です。 実際、何をしたいのかと言うとプリンターの出力時の設定を変更したいと思っております。 会社のプリンターですが方針でデフォルトが「両面」「2分割」で設定されております。 ただ複数ファイルの跨ったプレゼン資料などを大量に出力する際は「片面」「分割なし」 で設定を変更してプリントアウトしたいと思っており、いろいろ調べた結果Sendkeysを 使うことにいたしました。 ただ、先に申し上げた通りsendkeysメソッドが動かず悩んでおります。 素人の不躾けなご質問で大変申し訳ありませんが、解決できる方法をご存知の方ご教授ください。 sendkeysメソッドを使わない方法でも問題ありません。 以下、ダイアログを表示させ、タブを移動させるまでのコードです。 それではどうぞよろしくお願いいたします。 Sub AAA() Dim FOS As FileSystemObject Dim FolderC As Folder Dim FilesC As Files Dim FileC As File Dim FileName, Path_Name As String Set FOS = CreateObject("scripting.filesystemobject") Set FolderC = FOS.GetFolder("C:\Documents and Settings\AAAAA\デスクトップ\TEST") Set FilesC = FolderC.Files Path_Name = "C:\Documents and Settings\AAAAA\デスクトップ\TEST\" For Each FileC In FilesC FileName = FileC.Name Workbooks.Open FileName:=Path_Name & FileName ActiveWorkbook.Worksheets(1).Select With Application .SendKeys "^{P}", True .SendKeys "%r", True .SendKeys "^{tab}", True .SendKeys "{tab 3}", True End With ActiveWorkbook.Close False Next Set FOS = Nothing End Sub

  • 複数のコマンドボタン(VBAで)を一つにまとめたい。

    複数のコマンドボタン(VBAで)を一つにまとめたい。 Private Sub CommandButton1_Click() Application.Goto Reference:=Range("A7"), Scroll:=True End Sub Private Sub CommandButton2_Click() Application.Goto Reference:=Range("A29"), Scroll:=True End Sub Private Sub CommandButton3_Click() Application.Goto Reference:=Range("A51"), Scroll:=True End Sub Private Sub CommandButton4_Click() Application.Goto Reference:=Range("A73"), Scroll:=True End Sub Private Sub CommandButton5_Click() Application.Goto Reference:=Range("A95"), Scroll:=True End Sub Private Sub CommandButton6_Click() Application.Goto Reference:=Range("A117"), Scroll:=True End Sub Private Sub CommandButton7_Click() Application.Goto Reference:=Range("A139"), Scroll:=True End Sub Private Sub CommandButton8_Click() Application.Goto Reference:=Range("A161"), Scroll:=True End Sub Private Sub CommandButton9_Click() Application.Goto Reference:=Range("A183"), Scroll:=True End Sub Private Sub CommandButton10_Click() Application.Goto Reference:=Range("A205"), Scroll:=True End Sub Private Sub CommandButton11_Click() Application.Goto Reference:=Range("A227"), Scroll:=True End Sub 上記のように複数のコマンドボタンを関数化して一つにすることは出来るでしょうか?

  • EXCElのVBAからPDFを開き印刷する。

    エクセルのフォームからダイヤグロボックスを開いて、pdfファイルを選択し開き印刷したいのですが、いろいろやったのですが、ファイルが開きません。単純にファイル名を指定して開き印刷するのは出来るのですが。ダイヤグロボックスから開きたいのでどなたかご指導いただけませんか? 1.直接アクロバットリーダーからファイルを開き印刷   Private Sub CommandButton2_Click()    PrinterName = Application.ActivePrinter    Filename = "C:\○○\××××.pdf" Set myShell = CreateObject("WScript.Shell") myShell.Run ("AcroRd32.exe /t " & Filename) End Sub 2.ダイヤグロボックスからファイルを開く Private Sub microbe_Click() ChDrive "R" ChDir "R:\○○\××\△△" OpenFileName = Application.GetOpenFilename("PDF Documents,*.pdf")   ??? end sub よろしくお願いします。

  • エクセルマクロ  リンクダイアログのスルー

    下記のVBAを作成し、動かしているのですが、 Office2002以降では、問題なく動くのですが、Office2000では、コピー先のファイルを開く際に、リンクのダイアログが表示されます。 コピー先ファイルのリンクを削除したらよいのですが、どうしても見つかりません。 なので、下記のマクロにリンクダイアログをスルーするようにしたいのですが、どのようにすればよいか教えてください。 Private Sub CommandButton1_Click() Dim wb As Workbook Application.ScreenUpdating = False Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\AAA.xls") ThisWorkbook.Sheets("BBB").Range("E4:AR4").Copy wb.Sheets("CCC").Range("E4:AR4") Application.DisplayAlerts = False wb.Close (True) Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub

  • コマンドボタンのEnterイベント後に、フォーカスを移動したい。

    コマンドボタンのEnterイベント後に、フォーカスを移動したい。 フォームに「TextBox1」(TabIndex=0)「TextBox2」(TabIndex=1)「CommandButton1」(TabIndex=2)の3つのコントロールがある場合。 CommandButton1がクリックされた場合も、TextBox2からCommandButton1に、タブキーまたはエンターキーで、フォーカスが移った場合にも、同じ処理を行い、処理結果によってTextBox1やTextBox2にフォーカスを移したいと考えています。 以下のようなサンプルを作成しました。 Private Sub CommandButton1_Enter() CommandButton1_Click End Sub Private Sub CommandButton1_Click() MsgBox ("OK") TextBox2.SetFocus End Sub この場合、CommandButton1_Enterのイベントが起こった場合、CommandButton1_Click()のTextBox2.SetFocusは効きません。 (正確には、CommandButton1_Enterイベントが終わった時点で無効でしょうか。) Enterイベントは、フォーカスが移動する前に発生するため、このイベントが終わった後に、そもそもの動作に戻り、フォーカス移動が発生してしまうからなのだと思っております。 要は、コマンドボタンにタブキーやエンターキーでフォーカスしても、コマンドボタンをクリックしたのと同じ処理を行い、所定の位置にフォーカスを持っていきたいのですが、どのように行えば良いか、わからない状況です。 よろしくお願いいたします。

  • EXCEL VBA 印刷

    EXCEL VBA 印刷 初歩中の初歩で申し訳ありません・・・該当シート(Sheet1(名前は別名))の印刷をしたいと思い、ボタンの設定をしたのですが エラーとなります(画像を添付します。) お手数ですが、フォローの程宜しくお願いいたします。 参考までにコードも記載します。 Private Sub CommandButton9_Click() Range("A137").Select End Sub --------------------------上記はこんぼボックスで該当セルへジャンプしています。 Sub 印刷の実行() Worksheests("Sheet1").PrintOut End Sub

専門家に質問してみよう