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

Q★印刷しようとしたら”スプール中”でそのまま・・・★

エプソンM830Cです。

今日、印刷しようとしたら
エプソンが立ち上がらず
プリンターの情報を見たら
状態”スプール中”で、そのまま動く
けはいがあません。

WINDOWS XPです。

年賀状も印刷しないといけないのに・・・
再起動して見たりしたのですが・・・

どうしたりいでしょうか?

Aベストアンサー

プリンターのプロパティの詳細設定で、スプールさせずに直接プリンターにデータを送るに切り替えてもだめでしょうか

Q7桁の時刻(00:00:00.0)のコンマ以下を省略する方法を分かる方教えて下さい!

エクセル初心者につき、教えて下さい!

7桁の時刻のコンマ以下を省略したいのですが、その方法を分かる方、教えて下さい!
例 18:34:32.5→18:34:32

Aベストアンサー

No.6です。
まだ解決していませんでしたか。

四捨五入ではなく切り捨てにしたいのであれば、
=TEXT(A1-"00:00:00.5","hh:mm:ss")*1
のように、丸めたい下の桁から5引いてから四捨五入されるようにするとよい。

TEXT関数で、数値に対して書式を指定して表示させ、1を掛けることで数値(シリアル値)に戻しています。
数式を入力したセルの表示形式をユーザー書式で "h:mm:ss" または "hh:mm:ss" にしてください。

QWindowsXPでの印刷でスプール中

図入りWord文書(800KB/9ページ)を印刷するとき、
Windows2000では印刷できますが、WindowsXPではスプール中となり固まります。ただ、7ページくらいにすると、WindowsXPでも印刷できます。
NECと富士ゼロックスのプリンターで試し、パソコンもXP、2000とも2台ずつ試しましたが、同様の現象でした。OSが新しくなったのに、印刷できる範囲が狭くなるのは非常に納得できないのですが、そういうものでしょうか?それとも設定変更により改善できるのでしょうか?はたまた私の勘違いでしょうか?
すみませんが、よろしくお願いします。

Aベストアンサー

プリンタのドライバを最新バージョンにしてみたらどうでしょうか?

あと、Wordであれば、[ツール]-[オプション]から[印刷]タブをクリック。
「バックグラウンドで印刷する」のチェックを変更してみてください。

改善するか不明ですが、思い当たる項目を明記しました・・・。

Qあるセルに17:00と表示されてるのに、編集時に(セルをダブルクリックすると)5:00:00PMと表示されるには?

エクセル(97)のあるセルに「17:00」と
表示されてるのに、編集する時にセルを
ダブルクリックすると「5:00:00 PM」
と表示される事があるのですが、
これはどうやってるのでしょう?

表示形式を変えてしまうと、表示そのものが変わってしまいます。
何かの裏技でしょうか?

Aベストアンサー

OS側の時刻表示の設定です。
Windows2000の場合はコントロールパネルの地域のオプションの時刻タブで
時刻の形式「tt hh:mm:ss」
午前の記号「AM」
午後の記号「PM」
にすればそうなります。
ただタスクバーの時計の表示もこの形式になりますが...

Q(*_*) Windowsで、「スプール中は削除できません」「スプール中は終了できません」と・・・? 「スプール」とは?

 デスクトップのVALUESTARに、Win98SEが入ってます。うっかりプリンタ(Canon BJ-F300)のスイッチを切ったまま、印刷開始のボタンを押したため、パソコンのきげんがわるく(?)なったようです。
 すぐにプリンタのスイッチを入れて、リセットボタンを押しても、印刷できませんでした。
 削除しようとすると「スプール中は削除できません」と表示が出ますし、Windoowsを終了しようとすると「スプール中はBJバックグラウンドモニタを終了できません」と表示が出て、こまっています。
 とにかくパソコンを終了させたいのですが、どうしたらいいんでしょうか? 印刷のことなんか、もうどうでもいいのですが……

Aベストアンサー

スプールとは
http://dictionary.goo.ne.jp/search.php?MT=%A5%B9%A5%D7%A1%BC%A5%EB&kind=jn&mode=0&base=1&row=1

終了させるならば、ハードディスクが動いてなかったら、
電源ボタンを4秒ほど押せばいいでしょう。

Qエクセル:マクロ「Application.CutCopyMode = False」って?

エクセルのマクロを記録していると

「Application.CutCopyMode = False」

というものがよく出てきますが、これは何でしょう?
どういう意味のものかわかりません。
削除しても差し支えないのもでしょうか?

Aベストアンサー

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
Range("A1").Select
Selection.Copy
Range("A2").Select
Application.CutCopyMode = False
ActiveSheet.Paste ← ココでエラー
------------
ご自分で、セルをコピーしてみると分かると思いますが、コピーした範囲が点線で点滅されます。
「Application.CutCopyMode = False」をすると、
その点滅がなくなります。

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
...続きを読む

QDWGでの印刷時スプール中のままで印刷できない事がある

なんでだろー。DWGでの印刷時スプール中のままで印刷できない事がある。事務所兼自宅で無線ラン接続での作業なのですが同一のPCでNo.1の既設図面を印刷すると印刷できて、No.2として新規作成DWGでは印刷されません。まったく同じ印刷設定にしているつもりですがスプール中と出てすぐ消えます。No.3の既設図面でも印刷できない事もあります。プリンタにデータも残らず、DWG内でもあたかも印刷は終わりましたと、いわんばかりにエラーも何も出ませんし・・・
現在はNo.1の図面をコピーして、その中身を消して、新しく作成しては印刷しています。 よろしくおねがいします。。。

Aベストアンサー

自信はないのですが
有線LANのプリントサーバーに接続されたプロッタを
windowsのネットワークプリンタで追加したとき同じような現象でした。
AutoCADのプロッタ管理でプロッタを追加する時に
ローカルに設定したら起きなくなったので
これが原因と思っています。
このときシステムツールのイベントビューアのシステムを確認したら
printのエラーが出ていてエラーコード1801で
PCがプリンタを見つけていない状態でした。
イベントビューアでprintのエラーを探して見てください。
ヒントがあるかもしれません。

Qexcelのマクロで指定した値が ='Sheet名'!XFD24 になってしまう

excelのマクロで ='Sheet名'!A24 と入力するマクロを作りたいのに ='Sheet名'!XFD24 と入力されてしまいうまく参照されません。参照できるようにするにはどうすればよいでしょうか。

指定先のA24がA~Cと24~25まで結合してあるセルであるためでしょうか、下が組んだマクロです

Range("B3").Select
ActiveCell.FormulaR1C1 = "='Sheet名'!R[21]C[-2]"
Range("A7").Select

作る際はマクロの記憶を使ってでた値がが"='Sheet名'!R[21]C[-2]"だったためそれを使っています

Aベストアンサー

相対指定の場所が悪いですね。

たとえば,

Range("B3").Select → Range("E3").Select 

と修正すればこれならXFDにならないでしょう?

R[21]C[-2]は相対指定です。
ここのマクロだとB3から左へ2つ戻って,21下がった場所。つまりAを飛び越して最終のXFDに行っている。

例えばこうすればいいでしょう。

Range("A3").Select
ActiveCell.Formula = "=Sheet2!A24"
Range("A7").Select

ただ,どんな目的のマクロか知りませんので絶対参照がいいのか相対参照がいいのかわかりませんけど。

Q同機種のプリンターを買った場合、プリンタドライバを再インストールする必

同機種のプリンターを買った場合、プリンタドライバを再インストールする必要はありますか?

二ヶ月前に買ったプリンターを不注意で壊してしまいました。
同じ機種を買ったのですが、その場合、プリンタードライバをまた、PCにセットアップする必要はありますか?それとも、
ただ、新しいプリンターをPCにUSBでつなげば良いだけなのでしょうか?
プリンタが使えないと困る状態ですので、恐縮ですが、至急ご回答いただければ幸いです。

Aベストアンサー

プリンタの修理屋です。

基本的にはどちらでも結構です。
インストーラーを立ち上げて画面の指示が出たらプリンタを接続すると言う普通の手順でも結構ですし、
何もせずにそのままプリンタを接続しても、普通は自動的にプリンタを検出してドライバをコピーして使えるようになります。

ただし、注意することが何点かあります。

前のプリンタをアンインストールせずにプリンタを接続すると、プリンタフォルダにもう一つプリンタのアイコンが出てくるはずです。後にコピー1などとつきます。

例)Canon iP4700 series (コピー1)

コピー1(場合によってはコピー2とか3とかになることもあります)が新しいプリンタのドライバです。
そちらを通常使うプリンタとしなければなりません。

ただ、何かの原因でこの動作がうまくいかない場合もあり、その場合は「新しいハードウェア」の画面が出てしまうことがあります。
この場合は「キャンセル」を選択し、USBケーブルを外してから、CD-ROMをインストールすればよいです。


また、他の方が言われているように、バージョンアップしたドライバを期待して、メーカーのHPなどからダウンロードしてインストールするのもよいのですね。

旧バージョンは残っていても問題にならないはずですが、もしアンインストールをするのでしたら、取説などを確認してアンインストーラーを使わなければトラブルの原因になります。
うかつにプリンタフォルダから削除するような操作をすると、同系統のプリンタが二度とインストールできなくなることもありえます。
(リカバリしか方法がなくなります)

プリンタの修理屋です。

基本的にはどちらでも結構です。
インストーラーを立ち上げて画面の指示が出たらプリンタを接続すると言う普通の手順でも結構ですし、
何もせずにそのままプリンタを接続しても、普通は自動的にプリンタを検出してドライバをコピーして使えるようになります。

ただし、注意することが何点かあります。

前のプリンタをアンインストールせずにプリンタを接続すると、プリンタフォルダにもう一つプリンタのアイコンが出てくるはずです。後にコピー1などとつきます。

例)Canon iP4700 se...続きを読む

Qエクセル勉強中です。よろしくお願い致します。100 - -50 = 150 になってしまいます。

エクセル初心者で、勉強中です。よろしくお願い致します。



     A       B

1    100      150  ←B1の式は【=A1-A2】です。

2    -50



答えが 150 となってしまうのです。
答えを  50 にしたいのですが なにか方法はありますでしょうか?

いろいろ 考えてみたのですが 全然 わかりませんでした。
なにか 方法があったら 教えていただけないでしょうか。
よろしくお願いいたします。

Aベストアンサー

150-50にしたいなら
B1の式は【=A1+A2】でしょう。
もしくは
【A2=50】でB1の式は【=A1-A2】ですね。


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

人気Q&Aランキング