4月17日はQueenの日!フレディ・マーキュリーの年代別ファッション&ヒットソングまとめ

エクセル2002を使用しています。VBAはまったくわかりません。
マクロの自動登録で印刷を記録すると、通常使うプリンタから
出力されるようですが、LANでプリンタ複数使用可能な環境です
ので、いちいち通常使うプリンタを変更するのではなく、マクロ
実行時にプリンタを選択したく思います。
 因みに、以下のマクロはSheet1に値を入力し、Sheet1の値をコピー
したSheet2を印刷するというマクロです。このマクロのどの部分に
コードを付け加えればプリンタをこのマクロ実行時に選択可能でしょうか?
もしくはマクロではプリンタを選択できないのでしょうか?
どうぞよろしくお願いいたします。

******************************************************************
Sub 印刷()
Sheets("Sheet2").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Sheet1").Select
End Sub
*******************************************************************

このQ&Aに関連する最新のQ&A

A 回答 (5件)

#4です。



WinAPIを使ってプリンタ一覧を取得。
VBAでActivePrinterを取得。
ユーザーの指示によりActivePrinterを設定。
印刷処理。
ActivePrinterを元に戻す。

ってことをやるには相当の技術力が必要になります。
ここはひとつ、
Application.Dialogs(xlDialogPrint).Show
こうして印刷ダイアログを表示するだけにとどめておいてはどうでしょうか。
あとはユーザーが好きなプリンタを選択して[OK]を押せば印刷されます。
    • good
    • 5

あのー・・・


使用環境が書いてないのですが・・・

・複数のPCで使用するマクロなのですか?
・それとも1台のPCで使用するが、出力するプリンタをフレキシブルに変更したい、ってことですか?

前者なら各PCの標準プリンタに出力されるので問題ないんじゃないかと思いますが・・・
後者であれば他の方の回答を参考にしてください。
    • good
    • 2
この回答へのお礼

回答ありがとうございます。
説明足らずで申し訳ありませんでした。
環境的には前者+後者のようなものです。
すなわち、各PCともに複数のプリンタドライバを入れている
ため(インクジェットとレーザプリンタなど)、出力の都度
どのプリンタに出力するのか選択したいのであります。

お礼日時:2002/09/23 01:03

まずは、マクロの記録時に、プリンターを選択するようなアクションをしてみてください。


そうすると、

Application.ActivePrinter = "******"

みたいなスクリプトがPrintOutの前に書かれませんか?

手っ取り早そうなのは、プリンターごとにマクロを用意することでしょうか・・
もしくは、
"******"っていうのを変数にします。例えば、

myPrinter = "*******"
Application.ActivePrinter = myPrinter

てな感じで。
ということは、myPrinterの値を入力により制御できればいいでしょう。
例えば、inputbox関数で、何らかの数値を入力させて、
その数値に対してmyPrinterの値を変更するとか。

どうでせう?
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
できるかどうかわかりませんがこのように試してみようと
思います。

お礼日時:2002/09/23 01:05

PrintOutの前に、ActivePrinterを入れるとどうですか。


(例)Application.ActivePrinter = "USBPRN01 の Canon BJ S300"
ActivePrinter プロパティは取得・設定とも可能とあり。
テストできる環境に無いので曖昧で済みません。
(ListBoxなどで、=の右辺に持ってくるプリンタのIDを
決めさせてセットする事も可能かと思います。)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ActivePrinterプロパティというのをヘルプで調べて
やってみようと思います。

お礼日時:2002/09/23 01:07

 PrintPreviewでプレビューしてから、印刷を選ぶ、というのはだめなんでしょうか?


 簡単に解決するにはこの方法しかないと思います。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
試しにやってみました。
欲張りなことを言ってすみませんが、できれば
プリンタを指定したらプレビュー無しに印刷で
きればと考えております。

お礼日時:2002/09/23 00:58

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

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

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

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

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"

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

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

Aベストアンサー

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

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

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で手差しトレイを指定させたい。

エクセル2010です。
だいぶ端折ってますが、以下のようなコードでDATAシートのデータをInput用シートに転記し、それを参照しているPrint用シートを連続して印刷したいのです。
その歳、印字する用紙はA4等の定形サイズではない特殊な台紙なので、プリンターで「手差し」トレイに入れます。
自分の端末だとプリンターは決まっているので指定できると思うのですが、このエクセルを使う人が特定できず、どのようなプリンターなのかわかりません。(少なくとも手差しトレイはあります)
そのためPrint実行前にユーザーにトレイを選択してもらうにはどのようなコードを書き加えればよいでしょうか?ご教示いただければ幸いです。

Sub test01()
Dim ws(2) As Worksheet
Dim i As Long, x As Long
Set ws(0) = Sheets("DATA")
Set ws(1) = Sheets("Input用")
Set ws(2) = Sheets("Print用")
x = ws(0).Cells(Rows.Count, "A").End(xlUp).Row
For i = 1 To x - 1
ws(1).Range("A1:N1").Value = ws(0).Range("A1:N1").Offset(i).Value
ws(2).PrintOut
Next
End Sub

エクセル2010です。
だいぶ端折ってますが、以下のようなコードでDATAシートのデータをInput用シートに転記し、それを参照しているPrint用シートを連続して印刷したいのです。
その歳、印字する用紙はA4等の定形サイズではない特殊な台紙なので、プリンターで「手差し」トレイに入れます。
自分の端末だとプリンターは決まっているので指定できると思うのですが、このエクセルを使う人が特定できず、どのようなプリンターなのかわかりません。(少なくとも手差しトレイはあります)
そのためPrint実行前にユーザー...続きを読む

Aベストアンサー

こんにちは。

「プリンターの設定」ダイアログを使うのはどうでしょうか?

Application.Dialogs(xlDialogPrinterSetup).Show
これで使えます。

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

QExcel・VBAでのプリンタ指定

パソコンに複数のプリンタが登録してあるのですが、
シート上にプリンタ(1)、プリンタ(2)というボタンを作っておき、
ボタンを押すだけでその指定されたプリンタから印刷するという
指定はできるんでしょうか?
できるとしたら、どのようにVBAで記述すればいいんでしょうか?
ちなみにネットワーク上のプリンタや、パソコンにローカル接続されて
そのパソコン経由で出しているプリンタもあります。
よろしくお願いします。

Aベストアンサー

一度、マクロの記録で試してみると良いと思います
Application.ActivePrinter = "EPSON VP-930 ESC/P on LPT1:"
こんな感じが作成されます。
以下は、マクロの記録で
印刷プレビュー、プリンターの切替
印刷
印刷プレビュー、通常のプリンターへ切替
を記録したものです。
Application.ActivePrinter = "EPSON VP-930 ESC/P on LPT1:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
"EPSON VP-930 ESC/P on LPT1:", Collate:=True
Application.ActivePrinter = "SHARP UX-MF25/50/60 Series (LAN) on Ne01:"

Q【Excel VBA】プリンタのプロパティダイアログの表示

Excel2003を使用しています。

あるシートのページ設定等をマクロの記録をとって、コードを書きました。
ページ設定が済んだら、プリンタのプロパティダイアログを表示させたいのですが、ここまでをマクロで処理することは可能でしょうか?

このシートを印刷するときは、A3用紙(横)1枚にA4(縦)で作成されているデータを2ページ印刷(2ページを1ページに集約印刷)したいので、ページ設定が済んだら、プリンタのオプション設定を忘れないよう、プリンタのプロパティダイアログが自動で表示されるようにできないかと思い、質問させていただきました。

私個人が印刷する際は、ここまで必要ないのですが、会社の年配の方が上記の設定で印刷するのに、わからない(覚えきれない)というので、何か良い方法はないかと考えているところでして…(^_^;)
この点に関しても、アドバイスをいただけると嬉しいです。
よろしくお願いします。

Aベストアンサー

Keyストロークを送る SendKeysステートメントというのがあります。
実行時の状況によっては今ひとつ確実性に欠けますが、
安易に考えるなら

Sub Macro1()
  SendKeys "%o"
  Application.Dialogs(xlDialogPageSetup).Show
End Sub

...こんなコードで良いかもしれません。

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。


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

人気Q&Aランキング