出産前後の痔にはご注意!

パソコンに複数のプリンタが登録してあるのですが、
シート上にプリンタ(1)、プリンタ(2)というボタンを作っておき、
ボタンを押すだけでその指定されたプリンタから印刷するという
指定はできるんでしょうか?
できるとしたら、どのようにVBAで記述すればいいんでしょうか?
ちなみにネットワーク上のプリンタや、パソコンにローカル接続されて
そのパソコン経由で出しているプリンタもあります。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

一度、マクロの記録で試してみると良いと思います


Application.ActivePrinter = "EPSON VP-930 ESC/P on LPT1:"
こんな感じが作成されます。
以下は、マクロの記録で
印刷プレビュー、プリンターの切替
印刷
印刷プレビュー、通常のプリンターへ切替
を記録したものです。
Application.ActivePrinter = "EPSON VP-930 ESC/P on LPT1:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
"EPSON VP-930 ESC/P on LPT1:", Collate:=True
Application.ActivePrinter = "SHARP UX-MF25/50/60 Series (LAN) on Ne01:"
    • good
    • 0
この回答へのお礼

ありがとうございます。
早速試してみたいと思います。

ちなみにネットワーク上のプリンタの場合はどうなるんでしょうか?

お礼日時:2008/05/05 13:15

NO1です。


ネットワーク上のプリンターでも関係ないと思います。
マクロの記録で試してもらうと良いと思います。
ご自身のパソコンインストールしたプリンターの名前で
切替できます。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルマクロで印刷プリンタを指定する方法

表題のとおりなんですけと、エクセルのVBAでの印刷命令はできますが、複数あるプリンタから特定のプリンタを指定したいのですが、なにかいい方法ありませんか?

Aベストアンサー

印刷のポートがLPT1:(プリンタポート)ならば

例:プリンタ名 自分のプリンタ
Application.ActivePrinter = "自分のプリンタ on LPT1:" 'プリンタの指定
ActiveWindow.SelectedSheets.PrintOut '印刷

印刷ポートがLAN内のプリンタサーバーの場合

例1:プリンタ名 事務室プリンタ
Application.ActivePrinter = "事務室プリンタ on Ne01:"
ActiveWindow.SelectedSheets.PrintOut

例2:プリンタ名 会議室プリンタ
Application.ActivePrinter = "会議室プリンタ on Ne02:"
ActiveWindow.SelectedSheets.PrintOut

Ne01 Ne02はLANにより異なります。

Qエクセルのマクロでプリンタを指定したいのですが

エクセルのマクロで共有のネットワークプリンタを指定しているのですが

Application.ActivePrinter = "*********** on Ne**:"

Ne**の部分がパソコンを再起動すると変更されてしまうようでうまくいきません。~on Ne**:の記述なしでプリンタを指定する方法はないでしょうか?

Aベストアンサー

こんにちは。
PrintOutメソッドの引数のActivePrinterはポート番号がなくても指定できますので、
印刷時に指定するようにしてはどうでしょうか。
(例)
Sheets(1).PrintOut Preview:=True, ActivePrinter:="EPSON LP-XXXX"

Qエクセルマクロ印刷時にプリンタを指定できますか?

エクセル2002を使用しています。VBAはまったくわかりません。
マクロの自動登録で印刷を記録すると、通常使うプリンタから
出力されるようですが、LANでプリンタ複数使用可能な環境です
ので、いちいち通常使うプリンタを変更するのではなく、マクロ
実行時にプリンタを選択したく思います。
 因みに、以下のマクロはSheet1に値を入力し、Sheet1の値をコピー
したSheet2を印刷するというマクロです。このマクロのどの部分に
コードを付け加えればプリンタをこのマクロ実行時に選択可能でしょうか?
もしくはマクロではプリンタを選択できないのでしょうか?
どうぞよろしくお願いいたします。

******************************************************************
Sub 印刷()
Sheets("Sheet2").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Sheet1").Select
End Sub
*******************************************************************

エクセル2002を使用しています。VBAはまったくわかりません。
マクロの自動登録で印刷を記録すると、通常使うプリンタから
出力されるようですが、LANでプリンタ複数使用可能な環境です
ので、いちいち通常使うプリンタを変更するのではなく、マクロ
実行時にプリンタを選択したく思います。
 因みに、以下のマクロはSheet1に値を入力し、Sheet1の値をコピー
したSheet2を印刷するというマクロです。このマクロのどの部分に
コードを付け加えればプリンタをこのマクロ実行時に選択可能でしょうか?
...続きを読む

Aベストアンサー

#4です。

WinAPIを使ってプリンタ一覧を取得。
VBAでActivePrinterを取得。
ユーザーの指示によりActivePrinterを設定。
印刷処理。
ActivePrinterを元に戻す。

ってことをやるには相当の技術力が必要になります。
ここはひとつ、
Application.Dialogs(xlDialogPrint).Show
こうして印刷ダイアログを表示するだけにとどめておいてはどうでしょうか。
あとはユーザーが好きなプリンタを選択して[OK]を押せば印刷されます。

QEXCELネットワークプリンタでのポート名について

お世話になります。

私は社内でWin98SE、EXCEL97を使用して色々作成し
社内の方々の各パソコンに送って、使用してもらっています。

しかしサーバー上に接続されている通常使うプリンタでないネットワークプリンタの印刷で問題がでました。
私の環境と同じWin98、Excel97だと問題ないのですが、
社内の方でXP、EXCEL2000の環境の方々が結構います。
その環境ですと、エラーが出てしまいます。


ActivePrinter = "ネットワークプリンタ名 on NExx:"
と言ってXP、EXCEL2000の環境では、on NExx:のポートを
記述しないとエラーが出てしまいます。
(Win98、Excel97では on NeXXの記述は不要です)
※上記のネットワークプリンタ名はExcelで入力します。

このポートを取得するには、どのような方法があるのでしょうか?

また、簡単にWin98、Excel97の時のように、Nexx等を
設定しない方法をご存知の方よろしくお願い致します。

よろしくお願い致します。

お世話になります。

私は社内でWin98SE、EXCEL97を使用して色々作成し
社内の方々の各パソコンに送って、使用してもらっています。

しかしサーバー上に接続されている通常使うプリンタでないネットワークプリンタの印刷で問題がでました。
私の環境と同じWin98、Excel97だと問題ないのですが、
社内の方でXP、EXCEL2000の環境の方々が結構います。
その環境ですと、エラーが出てしまいます。


ActivePrinter = "ネットワークプリンタ名 on NExx:"
と言ってXP、EXCEL2000の環境では、on NExx:のポ...続きを読む

Aベストアンサー

こんには。以下は、Windows Script で通常使うプリンタを変更し、
プリントプレビューして、VBA で元のプリンタに戻してます。
Win2000 Excel2000 で動作確認しました。

Dim sActivePrinter As String

With Application
sActivePrinter = .ActivePrinter
MsgBox sActivePrinter

With CreateObject("WScript.Network")
.SetDefaultPrinter "変更するプリンタ名"
End With

ActiveWindow.SelectedSheets.PrintPreview
.ActivePrinter = sActivePrinter
End With

"変更するプリンタ名" には "‥ on NExx" は必要ありません。

注意点は変更直後、エクセルは通常使うプリンタをロストします。
しかし、プリントプレビューは成功します。(^_^;

なぜロストするか謎ですが、プレビュー後に元に戻しているので問題ない、はず。

こんには。以下は、Windows Script で通常使うプリンタを変更し、
プリントプレビューして、VBA で元のプリンタに戻してます。
Win2000 Excel2000 で動作確認しました。

Dim sActivePrinter As String

With Application
sActivePrinter = .ActivePrinter
MsgBox sActivePrinter

With CreateObject("WScript.Network")
.SetDefaultPrinter "変更するプリンタ名"
End With

ActiveWindow.SelectedSheets.PrintPreview
.ActivePrinter = sActivePrinter
...続きを読む

QEXCEL マクロに於ける プリンタ番号検索方法

使用しているデータベースのマクロの中で、

Application.ActivePrinter = "●●●●● on Ne○○○:

このような表記があります


これらの ● と ○ には、どのような値が入るのでしょう?

多分、●側は登録したプリンター名を記入し、
○側は登録された割り当ての番号だと思うのですが、
○側の番号は、どこを見たら分かるのか教えてください

よろしくお願いします

Aベストアンサー

●はプリンタ名なので,ネットワークプリンタであれば通常は各パソコンで共通です。
○は各パソコンごとに,そのパソコン固有の番号になります。

問題の回避策は幾つかありますが

sub macro1()
dim s as string
s = application.activeprinter

worksheets("シート名").printout activeprinter:="●●●●"  'on以下不要
application.activeprinter = s
end sub

などのようにするのが一番手っ取り早いと思います。



#何らかの理由でどうしても印刷前に設定を済ませておきたい時は,たとえば下記の過去ログなどご参考に。
http://oshiete.goo.ne.jp/qa/1541934.html

QエクセルVBAでのネットワークプリンタのポー名の取得方法は?

サーバーに置いてある、ひとつのExcelシートをマクロを使用して印刷時のプリンターや範囲指定をしたかったのですが、各端末でアクティブプリンターの名称(ポート名)が異なっており、うまくいきません。

具体的には「プリンター名 on ポート名" の「ポート名」の部分が端末ごとで異なっています。

なに良い解決策があれば、教えてください。


※現在の状況
プリンター:同一のものが2台。LAN上で特定の固定IPを使用。
端末:複数台とも全てWinXP/Excel2003。LAN上でDHCPにて、サーバーより動的IPを使取得。

Aベストアンサー

#1 さんの Printer型は、Excelにはないはずですね。
>Dim p As Printer

API の EnumPrintersで、取ればよいと思います。
他人のコードを丸写しをしたくないので、Google で検索してみてください。
私も作ったことがありますが、時々、他人のコードがOS依存で違う場合がありますので、十分に注意してください。

QエクセルのVBAでプリンタを変更したいのですが・・・

エクセルのマクロでプリンタを変更して印刷をしたいと思っています。
そこで、

  (1) 利用できるプリンタ
  (2) (1)のポート
  (3) (1)のプリンタドライバ

を取得したいのですが、どうすればよいのでしょうか?
VBではプリンタオブジェクトを使って簡単に取得できるようなのですが、VBAでの方法がわかりません。
プリンタ設定ダイアログなどは表示せずに、APIなどを使ってできないものでしょうか?

どうぞよろしくお願いします。

【環境】Windows2000、Office2000

Aベストアンサー

プリンタ名等の取得はAPIを使用すればできますが、単純にプリンタを変更したいだけなら、以下のようにしてはどうでしょう?
プリンタ名を指定するだけで、通常使うプリンタを変更してくれますよ。

Sub set_printer(byVal strPrinter as String)

Dim objPrinter As Object

Set objPrinter = CreateObject("WScript.Network")
objPrinter.SetDefaultPrinter strPrinter

End Sub

参考URL:http://member.nifty.ne.jp/aya/wsh/wsh26.htm

QエクセルVBAでプリンタプロパティを操作したい

エクセルVBAでプリンターの『180度反転』とか『手差し』とかを設定したいのですが、
プリンタ固有の設定は印刷時の詳細設定ダイアログで行うしかなく、
これを自動で選択して印刷したいのです。
ダイアログの設定操作はエクセルマクロの録音ボタンでは記録されません。
プリンタドライバを呼ぶ関数で設定する方法とかないでしょうか。

色々調べるとあるのは以下ですが、どれも目的のものではありません。

1.アプリケーションオブジェクトのプリントプロパティで設定
Application.Printers オブジェクトには目的の設定は存在しない
Application.ActivePrinter でも目的の設定項目は無い
ActiveSheet.PageSetup はエクセルのページ設定なので問題外

2.プリンタダイアログを表示する命令を発行して手操作で設定
Application.Dialogs(xlDialogPrinterSetup).Show
でダイアログを表示して手操作で変更するのは手間がかかるので却下
SendKeys でダイアログ操作も SendKeys命令は不確かなので却下です

使うプリンターはキャノン LBP9600C ですから、
以下のプリンタードライバーツールを用いればできそうですが、
ユーザーズガイドを見ても、VBAから呼び出す例はありません。
Canon Driver Configuration Tool V4.03(32bit)

唯一試すことができそうなのは、上記ツールを用いて
カスタマイズドライバセットと言う設定を3種類作成し、
 スロット1
 スロット2
 手差し3
VBAからは条件に応じて選択し印刷と言う感じです。

参照設定でプリンタドライバ Dllをくっつけて、
専用関数を呼ぶことで、設定の変更ができると言うサンプルなどないでしょうか。
どうかよろしくお願いします。

エクセルVBAでプリンターの『180度反転』とか『手差し』とかを設定したいのですが、
プリンタ固有の設定は印刷時の詳細設定ダイアログで行うしかなく、
これを自動で選択して印刷したいのです。
ダイアログの設定操作はエクセルマクロの録音ボタンでは記録されません。
プリンタドライバを呼ぶ関数で設定する方法とかないでしょうか。

色々調べるとあるのは以下ですが、どれも目的のものではありません。

1.アプリケーションオブジェクトのプリントプロパティで設定
Application.Printers オブジ...続きを読む

Aベストアンサー

プリンターのドライバーでプリンターを名前を変えて設定をかえて必要な数だけ作成して置いたらいかがでしょうか?キャノンのプリンターを持っていないのでこちらでは試せませんが…

Qプリンタ一覧を取得

社内で複数のプリンタがあります、"複合機""ドットプリンタ""再生紙用プリンタ"などと名前を各クライアントに統一してつけて設定してあります、エクセルのVBAで特定のシートのみ"ドットプリンタ"で印刷するために
strAPtr = Application.ActivePrinter
で一旦通常のプリンタをバッファリングしておき
Application.ActivePrinter = "ドットプリンタ"
として印刷をかけ
Application.ActivePrinter = strAPtr
で戻すということをしたいのですが
このドットプリンタがクライアントPCによって
ActivePrinter = "ドットプリンタ on Ne02:"になったり
ActivePrinter = "ドットプリンタ on Ne00:"になったりクライアントによっては
ActivePrinter = "Ne00:のドットプリンタ"になったりして確定できません、
WinAPIを使ってプリンタの一覧の取得・・・という方法がありそうですがエクセルVBAで出来るのでしょうか、願わくばAPIを使わないで実現したいのですが知恵を貸してください

社内で複数のプリンタがあります、"複合機""ドットプリンタ""再生紙用プリンタ"などと名前を各クライアントに統一してつけて設定してあります、エクセルのVBAで特定のシートのみ"ドットプリンタ"で印刷するために
strAPtr = Application.ActivePrinter
で一旦通常のプリンタをバッファリングしておき
Application.ActivePrinter = "ドットプリンタ"
として印刷をかけ
Application.ActivePrinter = strAPtr
で戻すということをしたいのですが
このドットプリンタがクライアントPCによって
Acti...続きを読む

Aベストアンサー

OS が WindowsXP とかでしたら、

プリンタ接続の列挙
http://www.microsoft.com/japan/technet/scriptcenter/scripts/printing/client/prclvb06.mspx

こういったものも。

Qマクロで印刷時のポートについて

こんにちは
エクセルのマクロを作成していますが、うまくいかずに困っています。
内容は、LANで接続された複数台のプリンターを複数台のパソコンで一つのマクロを含んだエクセルファイルを共有使用しています。

この時操作するパソコンにより、登録されているプリンターのポート番号が違うために、それぞれ専用の印刷用マクロを作成して使用しています。

そこで質問ですが、印刷時にポート番号を指定せずにプリンター名でプリンター指定するには、どうすればよいのでしょうか?

よろしくお願いいたします。

Aベストアンサー

こんにちは。

PrintOut メソッドの名前付き引数 ActivePrinter でプリンターを指定すると、
ポート指定が不要です。

(例1)
ActiveSheet.PrintOut ActivePrinter:="XXXX XXXX"
(例2)
Range("A1:E25").PrintOut ActivePrinter:="XXXX XXXX"

一方で、ご質問にあるとおり、Application.ActivePrinter でプリンターを
指定する場合は、ポートまで指定しなくてはなりません。

(例3)
Application.ActivePrinter = "XXXX XXXX on Ne00:"


人気Q&Aランキング