同一プリンターで異なるトレイを指定して印刷するには?

Question 105.1 Excel VBA Borad (掲示板)より Previous Next
こんにちわ。 印刷マクロについてご教示下さい。
エクセル2003を使用して印刷マクロを組んでいます。使用プリンタは、RICOH IPSiO SP 6210 です。
同じプリンタを使用して手差し用とトレイ用のドライバーを用意し、手差しから不定形サイズの用紙を印刷して、続けてA4用紙をトレイから印刷しようとするとうまく作動しません。
症状としては手差しトレイにA4用紙を入れてくださいと表示されてしまいます。
プリンタの電源を切ってスプール表示してみたところ、問題なく手差し用とトレイ用で別れてデータは飛んでいました。
印刷マクロは下記のとおりです。宜しくお願い致します。
    基点セル = "A1"
    Set 領域 = ws2.Range(基点セル).CurrentRegion
    行数 = 領域.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1 '★★
    枚数 = Application.RoundUp(行数 / 20, 0)
'
    With CreateObject("WScript.Network")
        .SetDefaultPrinter "RICOH IPSiO SP 6210 RPCS (手差し用)"
    End With
    ws3.PrintOut
'
    With CreateObject("WScript.Network")
        .SetDefaultPrinter "RICOH IPSiO SP 6210 RPCS"
    End With
    ws4.PrintOut To:=枚数, Copies:=1
Answer   Copyright (C) 2012.11.7 永井善王
回答が遅くなりまして、すみません。 たまたま超多忙でした。
同一プリンターの手差しトレイと、A4トレイとを使い分けしたいのですね。 レーザープリンターをお使いですか。
ご提示のマクロはWSHで、WshNetworkオブジェクトの SetDefaultPrinterメソッドを使って「デフォルトプリンター」を設定してから、VBAのPrintOutメソッドでアクティブプリンターに印刷しようとするものですね。
『スプール表示してみたところ問題なく動作していた』ということですので、本来ならば再現テストをして確認したいところですが、当方は現在、レーザープリンターを使える環境になっていないので出来ません。
ところで、WSHを使わず、Excel VBAだけで同様の処理を行う場合は、「現在使用プリンター」を指定してから PrintOutメソッドを ActivePrinter引数を省略した状態で実行する方法があります。
そのためのコードは
プリンターを指定する または プリンターを一時変更する を見ていただきたいですが、留意点は「現在使用プリンター」には印刷ポートを含めて指定することで、たとえば、Excel2003または2007の場合、「 Canon iP2600 series on Ne03: 」のように on Ne03: が付くことです。
また、「現在使用プリンター」の値の取得は、
現在使用しているプリンタ名を取得する にあるとおり簡単です。
あなたのマクロの中の PrintOutメソッドの直前に
msgbox Application.ActivePrinterを挿入して実行してみれば、はっきりします。

なお、事前に、手差しトレイを選択したプリンターと、A4トレイを選択したプリンターの両方をコントロールパネルで追加しておく必要があることは、ご承知のとおりです。
では、上手くいくようになったら、お知らせください。ガンバ!
ありがとうございました
忙しい中ありがとうございます。お陰様で無事うまく作動しました。
WSHで、WshNetworkオブジェクトの SetDefaultPrinterメソッドを使って「デフォルトプリンター」を設定しているのには、ちょっとした訳がありまして。。。
会社で使用している為、新しくプリンターの追加があると 「
Canon iP2600 series on Ne03: 」の on Ne○○ の部分が変わってしまう現象に悩まされた結果、Neを表示しないアクティブプリンター変更方法に変更しました。
プリンタードライバーの設定ミスで on Ne○○ に一度は変更して動かなかったので、同じ動きをすると思い違いしてしまいました。
今回はすごく勉強になりました。またよろしくお願い致します。 以下は動作マクロです。
    基点セル = "A1"
    Set 領域 = ws2.Range(基点セル).CurrentRegion
    行数 = 領域.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1 '★★
    枚数 = Application.RoundUp(行数 / 20, 0)
'
    Application.ActivePrinter = "RICOH IPSiO SP 6210 RPCS (手差し)on Ne○○:"
    ws3.PrintOut
    
    Application.ActivePrinter = "RICOH IPSiO SP 6210 RPCS on Ne○○:"
    ws4.PrintOut To:=枚数, Copies:=1

 

Excel VBA Macro