Accessテクニックのホームへ戻る

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

 

レポートを印刷するプリンタを選択する

 

レポートを印刷するプリンタをコンボボックスから選択します。コンボボックスからレポート名を選択すると、プリンタのコンボボックスに印刷先のプリンタが表示されます。レポートがデフォルトプリンタに印刷するように設定されているときは、[Accessのデフォルトプリンタに印刷]のチェックが付きます。この場合、プリンタのコンボボックスには、Accessのデフォルトプリンタが選択された状態で表示されます。レポートにデフォルトプリンタ以外のプリンタが設定されているときは、プリンタのコンボボックスにそのプリンタが選択された状態で表示されます。

 

レポートの出力先を変更するときは、プリンタのコンボボックスから別のプリンタを選択して、[選択したプリンタに印刷]のボタンをクリックします。

 

 

1. 新規データベース作成

Accessを起動したら、ツールバーから新規作成のアイコンをクリックして、作業フォルダworkW171.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のデフォルトプリンタとします。つまり、ApplicationPrinterプロパティに、選択したプリンタのオブジェクトを設定します。その他のプリンタに印刷するときは、レポートの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

ダウンロード (171.lzh)