19.印刷処理の作成
ここでは、フォーム「アドレス帳メニュー」の[印刷]]ボタンをクリックしたときに、レポート「住所録一覧表」を印刷する処理を作成しよう。

印刷するときは、部数も指定できると便利ですね!というわけで、最初にダイアログで部数を入力し、指定された部数だけ印刷するようにします。
レポートを印刷する方法
レポートを印刷するときはDoCmd.OpenReportを使います。DoCmd.OpenReportは、印刷プレビューも表示することもできます。

まずは、普通に印刷(プリンターへ出力)する方法です。DoCmd.OpenReportの第2引数へacViewNormalを指定します。


  DoCmd.OpenReport レポート名, acViewNormal


次に、印刷プレビューを表示する方法です。印刷プレビューを表示するときは、DoCmd.OpenReportの第2引数へacViewPreviewを指定します。


  DoCmd.OpenReport レポート名, acViewNormal


ちなみに、印刷プレビューは自動で閉じることはないので、表示しておく必要がなければ閉じてしまいましょう。印刷プレビュー(レポート)を閉じるときはDoCmd.Closeを使い、第2引数へacReportを指定します。


  DoCmd.DoCmd.Close acReport, レポート名


ところで、DoCmd.OpenReportで印刷する場合は部数指定が出来ないという欠点があります。もし、印刷する部数指定をしたいときは、レポートを印刷プレビューで表示したあとにDoCmd.PrintOutを使って印刷します。印刷部数は、DoCmd.PrintOut第5引数へ数値で指定します。


  DoCmd.PrintOut acPrintAll, , , , 部数

というわけで、印刷処理を作りましょう
ここでは、フォーム「アドレス帳メニュー」のボタン[一覧印刷]へVBAコードを記述します。まずは、フォーム「アドレス帳メニュー」をデザインビューで開いて下さい。

フォーム「アドレス帳メニュー」をデザインビューで開いたら、ボタン[一覧印刷]のイベント「クリック時」へVBAコードを記述する準備を(プロパティウィンドウで「クリック時」を選択しをクリック)しましょう。

印刷処理は、「1.印刷部数の入力」、「2.入力された印刷部数のチェック」、「3.指定された部数を印刷」の順序で処理を行います。

VBAコードを記述したら、印刷処理が正常に動作するか確認してみよう。手順は、フォーム「アドレス帳メニュー」をフォームビューで開き、[一覧印刷]ボタンをクリックしてください。指定した部数だけ住所録一覧表が印刷されればOK。

 ■イベントプロシージャ「一覧印刷_Click」の作成例
Private Sub 一覧印刷_Click()

    '19.印刷処理の作成
    '記述先:フォーム[アドレス帳メニュー]/ボタン[一覧印刷]/[クリック時]

    '印刷部数
    Dim varCopies As Variant

    '部数の入力
    varCopies = InputBox("部数を数字で入力してください", "印刷部数の指定")

    '未入力なら何もしない
    If Len(varCopies) = 0 Then
       Exit Sub
    End If

    '部数が数値以外のときや0のときはエラー
    If IsNumeric(varCopies) = False Then
       MsgBox "部数は数字で入力してください", vbOKOnly + vbCritical, "入力エラー"
       Exit Sub
    ElseIf CLng(varCopies) = 0 Then
       MsgBox "部数は0以上で入力してください", vbOKOnly + vbCritical, "入力エラー"
       Exit Sub
    End If

    '印刷するかを確認します
    'ダイアログには部数も表示します
    If MsgBox("住所録一覧表を印刷しますか?" & vbCrLf & "部数=" & varCopies _
            , vbYesNo + vbInformation, "印刷の確認") = vbYes Then
       '「はい」のときはレポートを印刷します
       '最初に印刷プレビューを表示
       '次に部数を指定して印刷
       '最後に印刷プレビューを閉じます
       DoCmd.OpenReport "住所録一覧表", acViewPreview
       DoCmd.PrintOut acPrintAll, , , , CLng(varCopies)
       DoCmd.Close acReport, "住所録一覧表"
    End If

End Sub
 ※これは、Access VBAです。

■このプロシージャの解説

ここで、印刷部数の入力を受け付けます。印刷部数を受け取る変数「varCopies」はバリアント型(Variant)にしました。これは、印刷部数の受付でどんな内容が入力されるかわからないからです。バリアント型の変数は、文字や数値などデータ型を問わずどんな型のデータでも入れることが出来ます。

    '印刷部数
    Dim varCopies As Variant

    '部数の入力
    varCopies = InputBox("部数を数字で入力してください", "印刷部数の指定")


このあたりは、入力された印刷部数のチェックです。何らかの値が入力されているかは、Len関数で長さを調べその結果から判定しています。この例では、0であれば未入力と判定します。また、その内容が数値であることをIsNumeric関数を使ってチェックしています。数値以外の情報が入力されている場合は、メッセージを表示しプロシージャを終了(Exit Sub)します。

    '未入力なら何もしない
    If Len(varCopies) = 0 Then
       Exit Sub
    End If

    '部数が数値以外のときや0のときはエラー
    If IsNumeric(varCopies) = False Then
       MsgBox "部数は数字で入力してください", vbOKOnly + vbCritical, "入力エラー"
       Exit Sub
    ElseIf CLng(varCopies) = 0 Then
       MsgBox "部数は0以上で入力してください", vbOKOnly + vbCritical, "入力エラー"
       Exit Sub
    End If


印刷処理を行っています。念のため、印刷前に確認メッセージを表示し、そこで「はい」が選択された場合のみ印刷するようにしています。ちなみに、部数はバリアント型の変数なので、念のため「CLng()」を使って数値型に変換し指定しています。

    '印刷するかを確認します
    'ダイアログには部数も表示します
    If MsgBox("住所録一覧表を印刷しますか?" & vbCrLf & "部数=" & varCopies _
            , vbYesNo + vbInformation, "印刷の確認") = vbYes Then
       '「はい」のときはレポートを印刷します
       '最初に印刷プレビューを表示
       '次に部数を指定して印刷
       '最後に印刷プレビューを閉じます
       DoCmd.OpenReport "住所録一覧表", acViewPreview
       DoCmd.PrintOut acPrintAll, , , , CLng(varCopies)
       DoCmd.Close acReport, "住所録一覧表"
    End If

次はラストの「最終設定」です
印刷処理の作成が終わったら、いったんフォームやVisual Basic Editorを全て閉じ「20.最終設定」へ進みましょう!次の章で、長かったアドレス帳ツールの作成が終了です。

ちなみに、閉じるときは保存も忘れずに…
Copyright(C) 1999-2006 結城圭介。 All rights reserved