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


1ページ全てに同じ宛名ラベルを印刷し用紙を節約する : Access裏技Tips



宛名ラベルは、1ページ1部で印刷されるのが基本なので用紙を無駄にしてませんか。 ここでは、1ページ全部に同じ宛名データを印刷する技を紹介します。

宛名ラベルを印刷する

  1. サンプルテーブル(tbl_sample)をもとにして、Accessの宛名ラベル作成ウィザードでレポート(rpt_sample)を作成します。
  2. フォームを作成し、詳細セクションにリストボックス(list選択)、オプショングループ(Op印刷設定)と印刷を行うコマンドボタン(Cmdコマンド)を配置します。
  3. レポートのNextRecordプロパティを用いて、1ページ全てに同じ宛名ラベルを作成します。

「宛名ラベル」のレポート作成

  1. 「宛名ラベル」のレポートを作成します。
  2. サンプルデータを元に「宛名ラベル」を作成します。
    (サンプルでは、見栄えのために枠線を入れています)

詳細セクションの印刷時イベントプロシージャの作成

詳細セクションの印刷時イベントプロシージャを作成します。

Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)

    On Error GoTo エラー発生

    Const MyCount = 12 ' --- A
    
    If Forms!frm_sample!Op印刷設定 = 2 Then ' --- B
        
        If PrintCount < MyCount Then ' --- C
            Me.NextRecord = False ' --- D
        End If
        
    End If
    
    Exit Sub
    
エラー発生:

    If Err.Number = 2450 Then ' --- E
        MsgBox "印刷設定フォームから実行して下さい。", vbCritical
    Else
        MsgBox "予期せぬエラーが発生しました。", vbCritical
    End If
        
End Sub
解説
  1. サンプルでは1ページ宛名ラベル12部を印刷できます。Constステートメントで定数を宣言します。
  2. frm_sampleフォームのオプショングループOp印刷設定の値が2(1ページに全て印刷)であれば以下の処理を行います。
  3. 引数PrintCountは、印刷時イベントが実行されるごとにカウントが1つ増えます。これを利用して、引数PrintCountが定数MyCountより少ない場合、以下の処理を行います。
  4. NextRecordプロパティをFalseにします。つまり、次のレコードに処理が移らないようにします。
  5. エラー処理ルーチンです。エラー番号2450は、直接レポートを開いた時に発生します。

「印刷設定」のフォーム作成

  1. 「印刷設定」のフォームを作成します。
  2. 非連結のフォームを作成します。
  3. リストボックスを作成します。

リストボックス値集合ソース図

リストボックスのプロパティ
列数    :  2
列幅    :  1cm;4cm
連結列  :  1
  1. オプショングループを作成しオプションボタンを2個配置します。
  2. 印刷を行うコマンドボタンを作成します。

コマンドボタンクリック時イベントプロシージャ

コマンドボタンクリック時イベントプロシージャを作成する。

Private Sub Cmdコマンド_Click()

    Dim Var条件 As Variant
    Dim Var行 As Variant
    Dim strmsgA As String
    Dim strmsgB As String
    Dim strmsgC As String

    Var条件 = Null

    For Each Var行 In Me.list選択.ItemsSelected ' --- A
        Var条件 = Var条件 & IIf(Not IsNull(Var条件), ",", "") & _' --- B
        "'" & Me.list選択.Column(1, Var行) & "'" ' --- C
    Next

    strmsgA = IIf(Me.Op印刷設定 = 1, "通常印刷", "1ページに全てを印刷") ' --- D
    strmsgB = "対象項目が何も選択されていませんので、印刷を中止します。" & _
                Chr(13) & "再度、実行して下さい。"
    strmsgC = "印刷対象者 : " & Var条件 & Chr(13) & Chr(13) & _ ' --- E
              "印刷設定 : " & strmsgA
    
    Select Case IsNull(Var条件) ' --- F
        Case True
            MsgBox strmsgB, 16
        Case False
            If 1 = MsgBox(strmsgC, 1) Then
                DoCmd.OpenReport "rpt_sample", acViewPreview, "", _
                "氏名 In (" & Var条件 & ")" ' --- G
            End If
    End Select
    
End Sub
解説
  1. For Each...Next ステートメントは、指定された回数を繰り返し実行するステートメントです。Me.list選択.ItemsSelectedは、list選択のリストボックスで選択している項目を指します。よ って、指定された項目の回数だけ、そのリストボックスの列に対して以下の処理を行います。
  2. IIF関数を用いて、Not IsNull(Var条件)が真(True)であればコンマ(,)を、偽であれば空白("")を返します。
  3. Columnプロパティでlist選択リストボックスで選択した値を取得します。
  4. IIF関数でオプションボタンで選択した値(1 Or 2)を分かり易い言葉に変換します。
  5. Chr関数の引数に13を代入すると改行を行います。
  6. IsNull(Var条件)はVar条件がNullであるば場合はTrueを、NullでなければFalseを返します。
  7. レポートrpt_sampleを開く時にOpenReportメソッドのWhere条件を設定しています。
    条件式にはIn句を用いて、該当するIDを並べています。

動作確認

  1. 「印刷設定」のフォームをフォームビューで開きます。
  2. リストボックスから該当者を複数選択します。
  3. オプショングループから「1ページに全て印刷」を選択します。

  1. コマンドボタンをクリックすると確認メッセージを表示します。

  1. 宛名ラベルの印刷プレビューを表示します。


関連ページ

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

 


1ページ全てに同じ宛名ラベルを印刷し用紙を節約する : Access裏技Tips


 

-Microsoft Access Club-

注目のモンスター専用サーバーからお買い得プランまで幅広くそろえています。cPanel、PLESK、WEBMINまでお任せ下さい。
注目のモンスター専用サーバーからお買い得プランまで幅広い。
cPanel、PLESK、WEBMINまでお任せ下さい。