Microsoft Access Club >Access裏技Tips >このページ >次頁 < 前項 サイト内検索


印刷データがない場合に印刷の可否をユーザーに一任する : Access裏技Tips



レポートでは、印刷データがない場合に印刷の中止を行える空データ時イベントが発生します。 ここでは、空データ時イベントを利用してユーザーに空データのまま印刷を行うか否かを一任する技を紹介します。

印刷データがない場合に印刷の可否をユーザーに一任する

  1. サンプルテーブル(tbl_sample)をもとにして、レポートヘッダー、ページヘツダー、ページフッターを持つ「期末試験成績の成績リスト」の 帳票レポート(rpt_sample)を作成します。
  2. レポートのレコードソースにクエリーを作成し、氏名フィールドの抽出条件欄に存在しない生徒名(鈴木一郎)を記述します。
  3. 空データ時イベントプロシージャを作成し、IFステートメントとMsgBox関数を利用してユーザーに印刷の可否を選択させます。

「期末試験成績の成績リスト」の レポートを作成

  1. 「期末試験成績の成績リスト」の レポートを作成します。
  2. サンプルデータを元に、期末試験成績の成績リストを作成します。

  1. レコードソースにクエリを作成します。
  2. このクエリの氏名フィールドの抽出条件欄に、存在しない生徒名(鈴木一郎)を記述します。

レポートのイベントプロシージャの宣言セクションに変数を作成

レポートのイベントプロシージャの宣言セクションに変数を作成します。

Option Compare Database
Option Explicit

Dim i As Byte ' --- A
解説
  1. バイト型の変数を作成します。
    レポートが開いている間、値を保持するために宣言セクション内に変数を定義しています。
今回のおすすめポイント

宣言セクションの変数

宣言セクション内に定義した変数の値は、プロシージャが終了しても破棄されません。 つまり、次のプロシージャに値を引き継ぐことができます。
逆に、プロシージャ内に定義した変数の値は、そのプロシージャが終了すると破棄されます。

レポートを開くイベントプロシージャの作成

レポートを開くイベントプロシージャを作成します。

Private Sub Report_Open(Cancel As Integer)

    i = 0 ' --- A

End Sub
解説
  1. 変数iの値を1に初期化しています。
    数値型の変数の初期値は0ですが、念を入れて初期化します。

空データ時イベントプロシージャの作成

空データ時イベントプロシージャを作成します。

Private Sub Report_NoData(Cancel As Integer)
        
    Dim strmsg As String
    strmsg = "印刷データがありませんが、印刷しますか?"
    
    If i = 0 Then ' --- A
        If vbCancel = MsgBox(strmsg, vbOKCancel + vbCritical) Then ' --- B
            Cancel = True ' --- C
        Else
            i = 1 ' --- D
        End If
    End If
    
End Sub
解説
  1. 変数iの値が0であれば、以下の処理に進みます。
  2. [キャンセル]ボタンが押されると、以下の処理に進みます。
  3. 空データ時イベントプロシージャの引数CancelにTrueを設定し、印刷を中止します。
  4. [OK]ボタンが押されると、変数iに1を代入する処理のみを行い、印刷を続行します。
今回のおすすめポイント

MsgBox関数の定数と値

定数で記述された vbCancel = MsgBox(strmsg, vbOKCancel + vbCritical)の構文を、値で書き直すと 2 = MsgBox(strmsg, 17) Then になります。
どちらが優位ということはありませんので、使い分けは好みの問題です。

動作確認

  1. レポートを印刷プレビューで開きます。
  2. MsgBoxダイアログが立ち上がれば、[OK]ボタンを押します。

  1. 空データのまま印刷されます。

今回のおすすめポイント

MsgBoxダイアログの連続起動

ページヘッダー、フッターを持たないレポートの場合、今回のような変数を用いた処理ではなく、IFステートメントとMsgBox関数を用いて、空データ時イベントプロシージャ内だけで簡単に記述できます。 しかし、サンプルのようにページヘツダー、フッター持つレポートの場合、 この処理ではMsgBoxダイアログが連続して起動してしまいます。

関連ページ

ページの先頭へ 前ページへ戻る

 


印刷データがない場合に印刷の可否をユーザーに一任する : Access裏技Tips


 

-Microsoft Access Club-

PLESKコンパネ管理者用の操作手順情報を発信しています。
Parallels社PLESKコンパネ管理者用の操作手順情報を発信中・・・。