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

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

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

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

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

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
...続きを読む

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]を押せば印刷されます。

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ネットワーク上のプリンタ名を取得

VB6で開発しています。
ネットワークプリンタの名称を取得する良い方法があれば教えて頂けますか。

CommonDialogやSHBrowsForFolderを使用すればネットワークプリンタの「共有名」は取得できるのですが、取得したいのはそれではなくて「サーバー上から見た場合のプリンタ名そのもの」なのです。

例えばあるサーバー上に共有プリンタAが存在するとします。
このプリンタは
プリンタ名 :プリンタA
共有名   :printer
という風になっています。

同ネットワーク内に存在するクライアント1からこのプリンターを参照しようとした場合、エクスプローラーや、あるいは上記のSHBrowsForFolderを使用した簡単なアプリケーションでは「\\サーバー名\printer」という値が返ってきます。

でも「プリンタの追加ウィザード」でネットワークプリンタをインストールしようとするとちゃんと「プリンタA」と表示されます。

この「プリンタA」という情報が欲しいのです。
何かよい方法がありましたら教えて下さい。
宜しくお願いします。

VB6で開発しています。
ネットワークプリンタの名称を取得する良い方法があれば教えて頂けますか。

CommonDialogやSHBrowsForFolderを使用すればネットワークプリンタの「共有名」は取得できるのですが、取得したいのはそれではなくて「サーバー上から見た場合のプリンタ名そのもの」なのです。

例えばあるサーバー上に共有プリンタAが存在するとします。
このプリンタは
プリンタ名 :プリンタA
共有名   :printer
という風になっています。

同ネットワーク内に存在するクライアント1からこ...続きを読む

Aベストアンサー

NetShareGetInfoかな

参考URL:http://www.vbvbvb.com/jp/gtips/0251/gNetShareGetInfoPrinter.html

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

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:"

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

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 ...続きを読む

Aベストアンサー

WordのActivePrinterを設定しなければならないのですよね?

 OApp.ActivePrinter = "AAA on Ne00:"

ではないですか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報