■ レポートを印刷するプリンタを選択する (2002,2003,2007)

図 レポートを印刷するプリンタを選択する
レポートを印刷するプリンタをコンボボックスから選択します。コンボボックスからレポート名を選択すると、プリンタのコンボボックスに印刷先のプリンタが表示されます。レポートがデフォルトプリンタに印刷するように設定されているときは、[Accessのデフォルトプリンタに印刷]のチェックが付きます。この場合、プリンタのコンボボックスには、Accessのデフォルトプリンタが選択された状態で表示されます。レポートにデフォルトプリンタ以外のプリンタが設定されているときは、プリンタのコンボボックスにそのプリンタが選択された状態で表示されます。
レポートの出力先を変更するときは、プリンタのコンボボックスから別のプリンタを選択して、[選択したプリンタに印刷]のボタンをクリックします。
1. 新規データベース作成
Accessを起動したら、ツールバーから新規作成のアイコン
をクリックして、作業フォルダworkにW171.mdbを作成します。
2. モジュールをインポート
Windowsのエクスプローラから、171.mdb(このページの最後からダウンロードできます)をダブルクリックして開きます。データベースウィンドウのオブジェクトから[モジュール]をクリックしたら、モジュール(basMyLib)をドラッグしてW171.mdbのデータベースウィンドウにドロップします。モジュールがインポートされたら、171.mdbを閉じます。
3. 新規レポート作成
データベースウィンドウのオブジェクトから[レポート]をクリックして、右側の新規オブジェクトのショートカットから[デザインビューでレポートを作成する]をダブルクリックします。レポートのデザインビューが表示されたら、ツールボックスのコントロールウィザードが無効になっていることを確認します。ツールボックスからラベルのアイコン
をクリックしたら、レポートの詳細セクションにドラッグします。ラベルの標題に「Sample Report1」を入力します。ツールバーから上書き保存のアイコン
をクリックして、「rptSample1」の名称で保存します。同様の手順で、「rptSample2」、「rptSample3」を作成します。

図 「rptSample1」を作成した例
レポート(rptSample2)をデザインビューで開いたら、メニューバーから[ファイル]→[ページ設定]を選択します。「ページ設定」ダイアログが表示されたら、[ページ]タブの印刷から[その他のプリンタ]をチェックして、[プリンタの設定]ボタンをクリックします。「ページ設定(プリンタ設定)」ダイアログが表示されたら、プリンタ名のドロップダウンリストから、デフォルトプリンタ以外のプリンタを選択して[OK]ボタンをクリックします。「ページ設定」ダイアログから[OK]をクリックしてダイアログを閉じたら、レポートを上書き保存します。

図 「ページ設定」から[その他のプリンタ]を選択する
4. 新規フォーム作成
データベースウィンドウのオブジェクトから[フォーム]をクリックして、右側の新規オブジェクトのショートカットから[デザインビューでフォームを作成する]をダブルクリックします。フォームのデザインビューが表示されたら、ツールボックスのコントロールウィザードが無効になっていることを確認します。
ツールボックスからコンボボックス、チェックボックス、コマンドボタンをクリックしたら、図のようにフォームの詳細セクションに作成します。ツールバーからプロパティのアイコン
をクリックして、プロパティウィンドウを表示したら、表のようにプロパティを設定します。

図 フォームにコンボボックス、チェックボックス、コマンドボタンを作成する
表 フォームに作成したコントロールのプロパティ
|
コントロールの種類 |
プロパティ |
値 |
|
コンボボックス1 |
名前 |
cboReports |
|
値集合タイプ |
値リスト |
|
|
コンボボックス2 |
名前 |
cboPrinters |
|
値集合タイプ |
値リスト |
|
|
チェックボックス |
名前 |
chkUseDefaultPrinter |
|
コマンドボタン |
名前 |
cmdPrint |
|
標題 |
選択したプリンタに印刷 |
5. コードビューに切り替えてイベント登録
ツールバーからコードのアイコン
をクリックしてVBEを表示します。コードビューが表示されたらOption Explicitの直後に、次のイベントとプロシージャを追加します。(イベントプロシージャは、ドロップダウンリストからオブジェクトとプロシージャを選択すると自動生成されますので、手入力する必要ありません。)
Private Sub Form_Load()
fsFillReportList Me.cboReports
fsFillPrinterList Me.cboPrinters
End Sub
Private Sub cboReports_AfterUpdate()
Dim strReportName As String
Dim strPrinterName As String
Dim rpt As Access.Report
strReportName = Me.cboReports.Value
DoCmd.OpenReport strReportName, View:=acPreview, WindowMode:=acHidden
With Reports(strReportName)
strPrinterName = .Printer.DeviceName
Me.chkUseDefaultPrinter.Value = .UseDefaultPrinter
End With
DoCmd.Close acReport, strReportName
On Error Resume Next
Me.cboPrinters = strPrinterName
End Sub
Private Sub cmdPrint_Click()
On Error Resume Next
Dim strReportName As String
strReportName = Me.cboReports.Value
If Me.chkUseDefaultPrinter.Value Then
Set Application.Printer = Application.Printers(Me.cboPrinters.ListIndex)
DoCmd.OpenReport strReportName, View:=acViewPreview
Set Application.Printer = Nothing
Else
DoCmd.OpenReport strReportName, View:=acViewPreview, WindowMode:=acHidden
With Reports(strReportName)
Set .Printer = Application.Printers(Me.cboPrinters.ListIndex)
End With
DoCmd.OpenReport strReportName, View:=acViewPreview
End If
End Sub
6. フォームを開く
VBEのツールバーから表示(Access)のアイコン
をクリックして、Accessのウィンドウに切り替えます。Accessのツールバーからフォームビューのアイコン
をクリックしてフォームを開きます。コンボボックスからレポート[rptSample1]を選択します。[Accessのデフォルトプリンタに印刷]のチェックボックスにチェックマークが付きます。プリンタのコンボボックスには、Accessのデフォルトプリンタが表示されます。[選択したプリンタに印刷]のボタンをクリックすると、印刷プレビューにレポートが表示されます。その他のプリンタに印刷するときは、プリンタのコンボボックスからその他のプリンタを選択してから[選択したプリンタに印刷]のボタンをクリックします。

図 [rptSample1]を選択するとAccessのデフォルトプリンタが表示される
コンボボックスからレポート[rptSample2]を選択したときは、[Accessのデフォルトプリンタに印刷]のチェックボックスには、チェックマークが付きません。プリンタのコンボボックスには、レポートに設定されているプリンタが表示されます。

図 [rptSample2]を選択するとその他のプリンタが表示される
●解説
コンボボックスにレポート名を表示するには、サブプロシージャfsFillReportListを呼びます。このプロシージャの引数には、コンボボックスのオブジェクトを指定します。コンボボックスにプリンタ名を表示するには、サブプロシージャfsFillPrinterListを呼びます。このプロシージャの引数には、コンボボックスのオブジェクトを指定します。
‘ フォーム読み込み時のイベント
Private Sub Form_Load()
‘ コンボボックスにレポート名を追加
fsFillReportList Me.cboReports
‘ コンボボックスにプリンタ名を追加
fsFillPrinterList Me.cboPrinters
End Sub
コンボボックスからレポートを選択したとき、レポートに設定されているプリンタ名を表示するには、コンボボックスの更新後処理/AfterUpdateイベントを使用します。このイベントでは、レポートを隠しモードで開いてプリンタ情報を取得して表示します。
‘ コンボボックスの更新後処理イベント
Private Sub cboReports_AfterUpdate()
‘ コンボボックスからレポート名取得
strReportName = Me.cboReports.Value
‘ レポートを隠しモードで開く
DoCmd.OpenReport strReportName, View:=acPreview, WindowMode:=acHidden
‘ レポートのプリンタ名とデフォルトプリンタの情報取得
With Reports(strReportName)
strPrinterName = .Printer.DeviceName ‘ プリンタのデバイス名取得
‘ デフォルトプリンタを使用する情報取得
Me.chkUseDefaultPrinter.Value = .UseDefaultPrinter
End With
‘ レポートを閉じる
DoCmd.Close acReport, strReportName
‘ コンボボックスにプリンタ名表示
Me.cboPrinters = strPrinterName
End Sub
[選択したプリンタに印刷]のコマンドボタンをクリックしたときは、デフォルトプリンタに印刷するのか、それともその他のプリンタに印刷するのかを調べます。デフォルトのプリンタに印刷するときは、選択したプリンタをAccessのデフォルトプリンタとします。つまり、ApplicationのPrinterプロパティに、選択したプリンタのオブジェクトを設定します。その他のプリンタに印刷するときは、レポートのPrinterプロパティに、選択したプリンタのオブジェクトを設定します。
‘ コマンドボタンのクリック時のイベント
Private Sub cmdPrint_Click()
‘ コンボボックスからレポート名取得
strReportName = Me.cboReports.Value
‘ デフォルトプリンタに印刷?
If Me.chkUseDefaultPrinter.Value Then
‘ コンボボックスから選択したプリンタをAccessのデフォルトプリンタとする
Set Application.Printer = Application.Printers(Me.cboPrinters.ListIndex)
‘ レポートをプレビューモードで開く
DoCmd.OpenReport strReportName, View:=acViewPreview
Set Application.Printer = Nothing
Else ‘ その他のプリンタに印刷
‘ レポートを隠しモードで開く
DoCmd.OpenReport strReportName, View:=acViewPreview, WindowMode:=acHidden
‘ レポートのPrinterプロパティにコンボボックスから選択したプリンタを設定する
With Reports(strReportName)
Set .Printer = Application.Printers(Me.cboPrinters.ListIndex)
End With
‘ レポートをプレビューモードで開く
DoCmd.OpenReport strReportName, View:=acViewPreview
End If
End Sub