• ベストアンサー

プリンタ一覧を取得

社内で複数のプリンタがあります、"複合機""ドットプリンタ""再生紙用プリンタ"などと名前を各クライアントに統一してつけて設定してあります、エクセルの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

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

    エクセルのマクロで共有のネットワークプリンタを指定しているのですが Application.ActivePrinter = "*********** on Ne**:" Ne**の部分がパソコンを再起動すると変更されてしまうようでうまくいきません。~on Ne**:の記述なしでプリンタを指定する方法はないでしょうか?

  • VBAでプリンタを変えたい。

    こんにちは。 WindowsXPでOffice2003を使用しています。 ちょっと困っているので、わかる方は知恵をお貸しください。 EXCEL VBAを使用し、プリントアウト等色々使っています。 当初は、印刷の時 「Application.ActivePrinter = "(プリンタ名) on NeXX:"」 としていたのですが、不都合があり「Printout」メソッドを 使うようにしました。 問題は、ここからです。 このあと、ポート名(on NeXX:)を使わずに、通常使うプリンタ に戻す(印刷はしたくない)には、どのようにすれば良いのでしょうか。 わかりづらい質問で申し訳ございませんが、 よろしくお願いいたします。

  • EXCEL VBAでプリンタの設定方法について

    EXCEL VBAのプリンタの設定方法について質問があります。 Dim oApp As Object Dim WFM As Strin WFM = "\\Cl111\フォルダ\ファイル\" &Range("C3").Value & ".doc" Set oApp = CreateObject("Word.Application")  ’ワード起動 oApp.Visible = True oApp.Documents.Open WFM  ’文書を開く Application.ActivePrinter = "AAA on Ne00:"  ’プリンタ設定 oApp.activedocument.PrintOut Copies:=1, Background:=False  ’印刷 oApp.Quit SaveChanges:=False  ’ワード終了 Set oApp = Nothing このようなコードで、(1)ワードを開き、(2)プリンタを設定し、(3)印刷をする、という作業をしたいのですが、 Application.ActivePrinter = "AAA on Ne00:" ではプリンタの設定が変わらず、通常使うプリンターで印刷がされてしまいます。 ワードを開いて印刷することで何か特殊なコードが必要なのではないかと思うのですが、調べても該当するものが出てきませんでした。 どうぞよろしくお願いいたします。

  • VBでプリンターを選ぶ

    プリンターが数台あり、用紙によって、プリンターをVBで選ぶことをしていますが、一度OKになったVBが、数日立つとなぜかエラーになってしまいます。プログラムは、オートで作成したのですが下記のようになっております。下記で、[']の命令は、前回はOKであったのですが、本日はエラーになった分です。どなたかどうすればよいか教えてください。 Application.ActivePrinter = _ "\\FMV-DESKPOWER\RICOH imagio Neo 452 RPCS on Ne04:" ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _ "\\FMV-DESKPOWER\RICOH imagio Neo 452 RPCS on Ne04:", Collate:=True 'Application.ActivePrinter = ' "\\FMV-DESKPOWER\RICOH imagio Neo 452 RPCS on Ne03:" 'ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _ ' "\\FMV-DESKPOWER\RICOH imagio Neo 452 RPCS on Ne03:", Collate:=True

  • プリンター設定

    プリンター設定を教えて下さい。 Application.ActivePrinter = "AAA on Ne00:" 毎回 No.00 の部分が変わってしまって 初心者な者で、どのように設定していいのかわかりません。 よろしくお願い致します。

  • ネットワークプリンターをマクロで自動設定

    エクセルのマクロでネットワークに設定されているプリンターを 印字したい。 プリンターは複数台あり、今回はドットプリンターに用紙設定 15×5インチでバック側から帳票を入れて印字したいのですが? Application.activeprinter = "Ne03: の ドット2NEC multilmpact 700xx2" と設定するとNe03:の値がやるごとに変化してしまい、 次回やるとエラーになります。 ドット2NEC multilmpact 700xx2はプリンター名です。 マクロの登録で用紙設定等を設定してもマクロに反映していないので 書き方がわかりません よろしくお願いします。

  • Execl VBA UserForm1の印刷先

    Execl VBA UserForm1の印刷先を変更したいのですが Execl VBAで困っています。 UserFormの印刷を条件を変えてプリンター1とプリンター2に振り分けたいのですが ネットを検索してもいい方法が見つかりません。 UserFormはOSのプリンターを参照するため思うように印刷できません。 一度下記を試しましたが、試通常使うプリンターでしか印刷出来ません UserFormのプリンター切替方法のご伝授宜しくお願い致します。 =========================================== Sub チェンジプリンター() Dim myPrinter As String myPrinter = Application.ActivePrinter '現在のプリンターを記憶 If Worksheets("DeviceRead-Write").Cells(6, 11).Value = 2 Then 'I6が2ならEPSON_2プリンターに印刷する Application.ActivePrinter = "EPSON_2 on Ne02:" 'プリンターを切り替える Range("A4").Value = Application.ActivePrinter 'プリンターの確認 UserForm1.PrintForm 'フォームの印刷 Application.ActivePrinter = myPrinter 'プリンターを元に戻す Range("A2").Value = Application.ActivePrinter 'プリンターの確認 End If If Worksheets("DeviceRead-Write").Cells(6, 11).Value = 1 Then 'I6が2ならEPSON_1プリンターに印刷する Range("D2").Value = Application.ActivePrinter 'プリンターの確認 UserForm1.PrintForm 'フォームの印刷 End If End Sub

  • エクセルマクロで教えてください。

    エクセルマクロで、プリンター出力で、困ることが多々発生しています。 どなたか対処法がわかりましたら教えてください。 下記のようにマクロを組んで、印刷させることをしていますが、 最後の「Ne01」がなぜかわからないのですが、よく勝手に変わってしまうのです。 S_PRINT = "RICOH imagio Neo 452 RPCS on Ne01:" とか、 Application.ActivePrinter = "EPSON PM-G4500 on Ne03:" とマクロを組んでます。 そのため、エラーとなったときに、マクロを開き、00から順番に02.03.などを入れ替えております。 エラーとならない方法はないでしょうか?

  • エクセルマクロ?

    エクセルのマクロでFAXソフトをプリンタドライバとして選んで、FAXした後再び通常のプリンターを 選び印刷するというようにしたのですが、通常のプリンターを他のPC経由で印刷する形をとっており、 その際に、Application.ActivePrinter = "\\パソコンの番号\EPSON on Ne01:"というコードになっているの ですが、この場合のNe01というのは何を表しているのでしょうか? というのは、このNe以下の番号が突然変わりマクロが うまく動かなくなってしまいました。 これは、FAXソフトに起因するのものなのか? それとも、別の理由によるものなのか? 分りづらく申し訳ありませんが、どなたかよろしく お願いします。

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

    使用しているデータベースのマクロの中で、 Application.ActivePrinter = "●●●●● on Ne○○○: このような表記があります これらの ● と ○ には、どのような値が入るのでしょう? 多分、●側は登録したプリンター名を記入し、 ○側は登録された割り当ての番号だと思うのですが、 ○側の番号は、どこを見たら分かるのか教えてください よろしくお願いします

専門家に質問してみよう