プロが教えるわが家の防犯対策術!

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

A 回答 (3件)

OS が WindowsXP とかでしたら、



プリンタ接続の列挙
http://www.microsoft.com/japan/technet/scriptcen …

こういったものも。
    • good
    • 0
この回答へのお礼

ありがとうございました
アドバイスもらったときは半信半疑でしたが
変数宣言して使ってみると目的は達成できました

お礼日時:2005/04/08 10:22

一覧の取得は、以下で出来るのですが、



Set Win = CreateObject("Shell.Application")
For Each Obj_Item In Win.NameSpace(4).Items
  MsgBox Obj_Item.Name
Next

本来は、「ドットプリンタ on Ne02」だとしても
「ドットプリンタ」しか返してくれないです。APIを使っても同様だった気がします。

以下のように、エラーを無効にして、プリンターを羅列してはどうでしょうか。一覧の中で有効だったプリンタに切り替わりますので。

On Error Resume Next
Application.ActivePrinter = "ドットプリンタ on Ne00:"
Application.ActivePrinter = "ドットプリンタ on Ne01:"
Application.ActivePrinter = "ドットプリンタ on Ne02:"
On Error Goto 0
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます
実はこの手法やっていたのですが
(10個くらい作って・・・)クライアントによっては
"Ne02:のドットプリンタ"とかが出てきて
クライアントがどの名前で出てくるか
予想できません、予想できれば対策できるのですが

お礼日時:2005/04/08 09:43

Excel VBAではやはりむずかしいのではと思います。


WMIやAPIを使用する以外は方法がないのでは?

http://www.geocities.co.jp/Technopolis/2082/Soft …
    • good
    • 0
この回答へのお礼

ありがとうございます
結構難しいことやっているようですが
がんばって解析してモノにしてみようと
思っています

お礼日時:2005/04/08 10:35

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