dポイントプレゼントキャンペーン実施中!

ExcelやWordの特定のファイルを印刷するときのみ、通常使うプリンタとは別のプリンタで印刷したいです。
普通なら印刷の直前で、プリンタを切り替えますが、これが面倒。
こんなことってできますか?
2000.2003,2007どれでお答えいただいても結構です。

A 回答 (2件)

Excelの話です。



特定のファイルを『特定の端末で』印刷する時の設定だけなら、
その特定ファイルのThisWorkbookモジュールというものに Workbook_BeforePrint というイベントプロシージャを設定すれば良いです。
一例ですが

'ThisWorkbook Module
Option Explicit

Private aPrinter As String

Private Sub Workbook_BeforePrint(Cancel As Boolean)
  Const pPrinter = "EPSON LP-S0000 on Ne01:" '印刷したいプリンタ
  Dim x As Long
  
  With Application
    aPrinter = .ActivePrinter
    On Error GoTo errHndler
    .ActivePrinter = pPrinter
    .OnTime Now, "ThisWorkbook.defPrintset"
  End With
  Exit Sub
errHndler:
  x = MsgBox(pPrinter & "に切替できませんでした。" _
         & vbLf & "キャンセルしますか?", vbYesNo)
  If x = vbYes Then Cancel = True
End Sub

Private Sub defPrintset()
  Application.ActivePrinter = aPrinter
End Sub

こんな感じ。
Application.ActivePrinterを印刷(プレビュー)の前後で自動的に切り替える方法です。


でもネットワーク環境での複数端末からの利用に対応させるなら、ちょっと面倒です。
"EPSON LP-S0000 on Ne01:" のポート番号「Ne01:」が端末ごとに違います。
この場合、現実的なのは『このファイルを印刷する時はこのボタンから』、とシート上にボタンを置いて

Sub test()
  Dim aPrinter As String
  
  aPrinter = Application.ActivePrinter
  ActiveWindow.SelectedSheets.PrintOut ActivePrinter:="EPSON LP-S0000"
  Application.ActivePrinter = aPrinter
End Sub

こんなマクロをボタンに登録して使うほうが現実的でしょう。
(PrintOutメソッド時の引数 ActivePrinter にはポート番号不要)



Wordも詳しくないのであまりわからないですが、ボタン方式なら
Sub test2()
  Dim aPrinter As String
  
  aPrinter = ActivePrinter
  ActivePrinter = "EPSON LP-S0000"
  ActiveDocument.PrintOut
  ActivePrinter = aPrinter
End Sub
こうかな。(WordのActivePrinter切替はポート番号不要みたい)
    • good
    • 0
この回答へのお礼

御礼が遅れましたことをお詫びします。
>ネットワーク環境での複数端末からの利用に対応させるなら、ちょっと面倒です。
これがEPSONではありませんが、ネットワーク上にあるプリンタです。

やはりマクロで対応させるしかありませんかね。

お礼日時:2010/03/10 14:17

VBAで組むしかないでしょう。


ファイルの区別は拡張子で分けて
たとえば xls2 とか(ファイルの関連付けが必要ですが)
その拡張子をVBAに判断させて.....
というぐいあいに。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています