「通常使うプリンター」に設定されているプリンターの名前を取得する方法を探してみました。
以下をVBSで保存して実行すると、通常使うプリンターの名前をメッセージボックスで表示します。
Dim objLocator, objService, objClassSet, objClass, strName
Set objLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objService = objLocator.ConnectServer
Set objClassSet = objService.ExecQuery("Select * From Win32_Printer")
For Each objClass In objClassSet
If objClass.Default Then
strName = objClass.Caption
End If
Next
MsgBox strName,,"通常使うプリンター名"
Set objLocator = Nothing
Set objService = Nothing
Set objClassSet = Nothing
Set objClass = Nothing
Set strName = Nothing
実際には strName を他の作業に組み込んで使うことになると思います。
余談
ファイルメーカーの印刷ダイアログはOSによって制御されているらしいので、思ったように動作しないことがあります。
「印刷設定したのにその通りに印刷されない!」という事件が繰り返されないよう、「印刷設定」と「印刷」のスクリプトステップがどのように動作するか、まとめておきたいと思います。
- 印刷設定
「用紙サイズ」と「印刷の向き」を指定できます。逆に言えばこの2つ以外は設定してもうまく反映されません。
プリンターのプロパティを設定できるように見えますが、実際には「印刷」ステップを後ろに置いて実行してみると「印刷設定」ステップでのプリンタープロパティは無視されてしまいます。
なんだか使いにくいステップですが、プレビューモードで印刷範囲を正しく表示させたいときには有用です。
- 印刷
ダイアログを出せば基本的にすべて設定可能です。
ただし、印刷するレコードを対象レコードにしたり現在のレコードにしたりとユーザーが変更できてしまうので、ダイアログを出すことは意図しない動作の要因になり得ます。
自分で使うだけなら特に問題はないですが、不特定多数の人が使用する場合、ダイアログ無しにしておきたいです。
ダイアログ無しの場合、プロパティ設定を保存しておけば正常に印刷されますが、プリンター環境が変わった時は設定の修正が必要かもしれません。
さらに要注意点として、プロパティ設定を保存すると「印刷」ステップの用紙サイズと向きが適用されますので、「印刷設定」ステップが無意味になります。
プロパティ設定を保存しない場合、「印刷設定」の用紙サイズと向きで、前回印刷した時のプロパティを引き継いで印刷されます。
結局どうする?
- あらかじめ「印刷」ステップで用紙サイズや向き、プリンタープロパティをすべて設定しておく。
- 「印刷設定」ステップで用紙サイズと向きを指定し、「印刷」ステップはダイアログ無しでプロパティも設定しない。
のどちらかが通常は考えられます。
2. の方法の場合はプリンタープロパティが変更できないので、白黒印刷とカラー印刷などの切り替えが困難です。
プリンタープロパティはユーザーが指定できて、しかも印刷するレコードは変更できないようにしたいですよね。
そこで考えたのが「前回印刷したときのプロパティ」を作ってしまおうという方法です。
- 空白レイアウトで「印刷」ステップのダイアログを出し、プリンタープロパティを設定させ、空白ページを印刷する。
- 上記VBSを使ってプリンタ名を取得し、それを使ってVBSから印刷をキャンセルする。
これで印刷したプロパティが保存されるので、次からの「印刷」ステップに反映されます。
空白レイアウトでダミーの印刷を行っておいて、その後に実際に印刷したいレイアウトとレコードでダイアログ無しの「印刷」ステップを実行します。
空白ページは印刷されても問題ないのですが、プリンターの電源が入っていない時や用紙が無い時にエラーダイアログが出たままにならないよう、自動でキャンセルしたくてVBSを使っています。