• 締切済み

エクセルのマクロでのプリンタ自動切替について

エクセルのマクロ初心者ですが、ご教示いただければ幸いです。 業務で日々使用する様式をボタン一つで印刷できるよう、マクロを作成中です。 エクセルのファイルは共有ファイルサーバーに保存していて、各端末(例:WS0001、WS0002、WS0003…)から印刷したいと考えています。 各端末の「通常使うプリンタ」はPR0001なのですが、この様式はWS0001のUSBポートに繋がったPR0002から出力する必要があります。 WS0001とWS0002他から見た場合にプリンタのパスが異なるため、現状では ActiveSheet.PrintOut ActivePrinter:="pr0002" ActiveSheet.PrintOut ActivePrinter:="\\Ws0001\pr0002" と2つのマクロを別々のボタンに割り当てていますが、ボタンを押し間違えることがあり、何とか1つのマクロにできないかと考えています。 例えば「"pr0002"が無い場合は"\\Ws0001\pr0002"から出力しなさい」といような記述は可能でしょうか? On Error でできるのかと考え、 On Error GoTo 0 ActiveSheet.PrintOut ActivePrinter:="pr0002" On Error GoTo 0 ActiveSheet.PrintOut ActivePrinter:="\\Ws0001\pr0002" あるいは On Error GoTo 0 ActiveSheet.PrintOut ActivePrinter:="pr0002" ActiveSheet.PrintOut ActivePrinter:="\\Ws0001\pr0002" と記述してみましたが、何故かPR0001とPR0002と2枚出力されて、上手くいきません。 ネットワーク上のプリンタ出力先の記述は、 Application.ActivePrinter = "\\Ws0001\pr0002 on NeXX:" ExecuteExcel4Macro _ "PRINT(1,,,1,,,,,,,,2,"""\\Ws0001\pr0002 on NeXX:"",,TRUE,,FALSE)" と記述した方が確実なようですが、端末によってXXの数字が異なるようで、エラーになることがあります。 何卒よろしくお願いいたします。

みんなの回答

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

簡易的な方法では、 MsgBox Environ("COMPUTERNAME") これで端末名が取れますから、それで分岐処理してもいいかもしれませんね。

umeda
質問者

お礼

ご回答いただき、ありがとうございました。 上手くいくか一度やってみます。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

ありゃ,ダメですね。「無い」プリンタを指定してもエラーにはならない(標準のプリンタでするっと印刷されるだけ)ので,on error で分岐する方法は使えません。 失礼しました。 http://blog.livedoor.jp/akf0/archives/51472334.html http://blog.livedoor.jp/akf0/archives/51469843.html などの方法で事前にプリンタ一覧を取得し,あることが確認できたプリンタで印刷するように指定してください。 #「excel vba プリンタ 一覧」といったキーワードでぐぐってみると,関連情報が多数ヒットしますので参考にしてみて下さい。

umeda
質問者

お礼

再度色々と試してみましたが、やはり「無い」プリンタはエラーにはならないようですね。 もう少し色々な方法を試してみます。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

たとえば sub macro1()  on error goto errhandle  ActiveSheet.PrintOut ActivePrinter:="pr0002"  exit sub errhandle:  ActiveSheet.PrintOut ActivePrinter:="\\Ws0001\pr0002" end sub

関連するQ&A