• ベストアンサー

プリンタ一覧を取得

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

質問者が選んだベストアンサー

  • ベストアンサー
  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.2

OS が WindowsXP とかでしたら、 プリンタ接続の列挙 http://www.microsoft.com/japan/technet/scriptcenter/scripts/printing/client/prclvb06.mspx こういったものも。

katyou
質問者

お礼

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

その他の回答 (2)

  • hogehage
  • ベストアンサー率50% (54/107)
回答No.3

一覧の取得は、以下で出来るのですが、 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

katyou
質問者

お礼

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

  • stouma
  • ベストアンサー率35% (142/399)
回答No.1

Excel VBAではやはりむずかしいのではと思います。 WMIやAPIを使用する以外は方法がないのでは? http://www.geocities.co.jp/Technopolis/2082/Soft/Excel/Excel_b3.htm

katyou
質問者

お礼

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

関連するQ&A