VBAでプリンタを変える方法

このQ&Aのポイント
  • WindowsXPでOffice2003を使用している場合、VBAを使用してプリンタを変更する方法について教えてください。
  • EXCEL VBAを使用して、プリントアウトや印刷に関連する作業を行っています。最初は「Application.ActivePrinter = (プリンタ名) on NeXX:」としていましたが、不都合があるため「Printout」メソッドを使用するようにしました。しかし、通常使うプリンタに戻す方法がわからないので、教えてください。
  • 質問がわかりづらくて申し訳ありません。WindowsXPでOffice2003を使用している場合、EXCEL VBAを使用してプリンタを変更した後、通常のプリンタに戻す方法について教えてください。
回答を見る
  • ベストアンサー

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

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

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

Printoutの前に String変数にActivePrinterの値を代入しておき、印字後にその変数の値でActivePrinterを再設定しては? Sub Sample()  Dim sPrinter As String  sPrinter = Application.ActivePrinter '←ActivePrinter情報を変数に  '印字処理(適当)  ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _   "CutePDF Writer on CPW2:", Collate:=True  Application.ActivePrinter = sPrinter '←ActivePrinterを設定 End Sub

toshima
質問者

お礼

早速の回答有難うございます。 変数を宣言し、そこにプリンタ名を代入するという手があるのですね。 参考になります。

関連するQ&A

  • プリンタ一覧を取得

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

  • エクセルのマクロでのプリンタ自動切替について

    エクセルのマクロ初心者ですが、ご教示いただければ幸いです。 業務で日々使用する様式をボタン一つで印刷できるよう、マクロを作成中です。 エクセルのファイルは共有ファイルサーバーに保存していて、各端末(例:WS0001、WS0002、WS0003…)から印刷したいと考えています。 各端末の「通常使うプリンタ」はPR0001なのですが、この様式はWS0001のUSBポートに繋がったPR0002から出力する必要があります。 WS0001とWS0002他から見た場合にプリンタのパスが異なるため、現状では ActiveSheet.PrintOut ActivePrinter:="pr0002" ActiveSheet.PrintOut ActivePrinter:="\\Ws0001\pr0002" と2つのマクロを別々のボタンに割り当てていますが、ボタンを押し間違えることがあり、何とか1つのマクロにできないかと考えています。 例えば「"pr0002"が無い場合は"\\Ws0001\pr0002"から出力しなさい」といような記述は可能でしょうか? On Error でできるのかと考え、 On Error GoTo 0 ActiveSheet.PrintOut ActivePrinter:="pr0002" On Error GoTo 0 ActiveSheet.PrintOut ActivePrinter:="\\Ws0001\pr0002" あるいは On Error GoTo 0 ActiveSheet.PrintOut ActivePrinter:="pr0002" ActiveSheet.PrintOut ActivePrinter:="\\Ws0001\pr0002" と記述してみましたが、何故かPR0001とPR0002と2枚出力されて、上手くいきません。 ネットワーク上のプリンタ出力先の記述は、 Application.ActivePrinter = "\\Ws0001\pr0002 on NeXX:" ExecuteExcel4Macro _ "PRINT(1,,,1,,,,,,,,2,"""\\Ws0001\pr0002 on NeXX:"",,TRUE,,FALSE)" と記述した方が確実なようですが、端末によってXXの数字が異なるようで、エラーになることがあります。 何卒よろしくお願いいたします。

  • 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:" ではプリンタの設定が変わらず、通常使うプリンターで印刷がされてしまいます。 ワードを開いて印刷することで何か特殊なコードが必要なのではないかと思うのですが、調べても該当するものが出てきませんでした。 どうぞよろしくお願いいたします。

  • EXECL VBAにて自動印刷100枚でフリーズ

    フィリーズの原因 とりあえず、アクティブプリンターのみで印刷を連続すると異常なし 交互に印刷すると今度はリソース不足が出ました。 最後に、EPSON LPプリンターのみに連続印刷でやはりリソース不足が出ました。 どうもアクティブプリンターからの切替でリソースを必要としているみたいですが 対策はをご教示下さい。 ======================================== Sub チェンジプリンター() '印刷切り替え Dim myPrinter As String myPrinter = Application.ActivePrinter '現在のプリンターを記憶 If Worksheets("DeviceRead-Write").Cells(6, 13).Value = 2 Then 'I6が2ならEPSON_2プリンターに印刷する Application.ActivePrinter = "EPSON_2 on Ne00:" 'プリンターを切り替える ActiveSheet.PrintOut 'シートFormの印刷 Application.ActivePrinter = myPrinter 'プリンターを元に戻す End If If Worksheets("DeviceRead-Write").Cells(6, 13).Value = 1 Then 'I6が1ならEPSON LPプリンターに印刷する ActiveSheet.PrintOut 'シートFormの印刷 End If End Sub ==========================================

  • 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

  • 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

  • VBA修正してください!

    VBA修正してください! 以下のVBAを実行すると、アクティブシートが PDFに変換され、保存ダイアログボックスが出ずに 自動的にマイドキュメントに保存されます。 修正したいのは (1)保存場所を選べるようにしたい (2)adobe pdfが入っていないPCで使用した場合 MSGボックスが表示され、マクロを中止できるようにしたい -------------------------------------------------------- Dim sActivePrinter As String With Application sActivePrinter = .ActivePrinter With CreateObject("WScript.Network") .SetDefaultPrinter "adobe pdf" End With ActiveWindow.SelectedSheets.PrintOut .ActivePrinter = sActivePrinter End With End Sub -------------------------------------------------------- 使用するのは会社のPCで、複数の人が複数のPCで使用します。 最初、PDFをActiveプリンターに設定したのですが、ネットワークプリンターの 為、プリンターが"adobe pdf on Ne ○○:" ○○の部分が使用するたびに 異なり上手くいきませんでした。 VBAが全く分からない人も利用するので、デバック画面が出ないようにしたいです。 自分の知識では限界です・・・。 VBAに詳しい回答者の方、どうぞ上記VBAに書き足してください! よろしくお願いします!

  • EXCEL2007 VBAでのプリンタ切り替えについて

    いつもお世話になっております。 EXCELで帳票出力をする場合にプリンタを切り替えて(通常使うプリンタを変更して) 行おうと、いろいろ調べまして下記のようなプログラムを作成して実行しました。 Dim OldPrinter As String OldPrinter = Application.ActivePrinter With CreateObject("WScript.Network") .SetDefaultPrinter "EPSON LP-6100" End With ~~~~印刷処理~~~~ Application.ActivePrinter = OldPrinter WSHによるデフォルトプリンタの切り替えはうまく行くのですが、その後に もともとの通常使うプリンタに戻す処理がうまくいかず、プリンタが切り替わったまま になってしまいます。 いろいろと調べましたが、わかりませんでした。 参考になるサイトなどでも構いませんのでお願いいたします。

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

    エクセルのマクロでプリンタを変更して印刷をしたいと思っています。 そこで、   (1) 利用できるプリンタ   (2) (1)のポート   (3) (1)のプリンタドライバ を取得したいのですが、どうすればよいのでしょうか? VBではプリンタオブジェクトを使って簡単に取得できるようなのですが、VBAでの方法がわかりません。 プリンタ設定ダイアログなどは表示せずに、APIなどを使ってできないものでしょうか? どうぞよろしくお願いします。 【環境】Windows2000、Office2000

  • Excel2010 VBA

    すみません。 VBA独学勉強中の身です。 VBAにて Workbook Open で いろいろ試してコードを入れて閉じたところ、 ブックの起動ができなくなりました。 コードは、 Application.ActivePrinter = "プリンター名"(プリンター名はきちんと入れてます。) をいれました。(後で気づいたのですが、コレ自体間違っていました。) 100%読み込みまでは行きますが、 その後がず~っと読み込み中というか、 ブックの表示がされない状態です。 30件程度のデータなので、 バックアップを取っておいたデータ無しの ファイルに入れなおせば済むのですが、 起動する方法がもしあれば、教えて頂きたく 質問させていただきました。 よろしくお願いします。

専門家に質問してみよう