Microsoft Access Club >SampleFile >インデックス >このページ >次頁 < 前項  サイト内検索


宛名ラベル印刷で1ページ全てに同一データを印刷する方法 : SampleFile236



ラベル印刷形式のレポートは、レポート作成ウィザードで簡単に構築きます。しかし、既定の印刷形式は、複数のデータを1ページ内に印刷するものです。つまり、1つのレコードをラベル印刷する場合でも、ラベル用紙を1枚使用しなくてはいけません。 今回、1つのラベル用紙に1レコードのみを印刷する方法をご紹介します。

考え方

考え方は以下のとおりです。

  1. テーブルフィールドは、氏名、郵便番号、住所1、住所2、住所3、印刷可否です。
  2. レポートの作成は、Accessのラベル作成ウィザードを利用します。
  3. 印刷は、印刷設定のフォームを用いて行います。
  4. 骨子は、レポートの印刷時イベントにNewRecordプロパティを用いて、新規レコードを印刷しないように設定します。

テーブルデータ(tbl_sample)

下記のようなテーブルデータを作成します。

 
ID 氏名 郵便番号 住所1 住所3 住所2 CK
1 佐々木 構造 001-1234 東京都港区芝浦町   21−25 True
2 真鍋 隆志 326-5944 大阪市北区沿え門長   8−32−512 True
3 久島 亮子 123-5632 京都府中京区御所   3−52−32 True
4 両全 加奈 652-3001 千葉県千葉市千葉町   85−33 True
5 佐藤 久美 623-0123 沖縄県名護市五個木島 ごまめマンション321号 1−2−62 True
6 中道 陽一 852-9632 岡山市岡山町   1−1−1 True
7 真鍋 健二 562-2300 東京都練馬区裁断町 世界長マンション821 87−62−33 True
8 神崎 幸子 895-3321 広島市広島加藤町 鈴木ビル内 9−32−995 True
9 坂本 ふみ 123-0251 東京都千代田区国会町   1−1−1 True
10 榊原 真知子 950-23600 秋田県秋田市きりたんぽ町   8−32−15 True

ラベル印刷レポート(rpt_sample)の作成

Accessのレポート作成ウィザードを用いてラベル形式のレポートを作成し、以下のように一部修正します。

  • テーブルのCKフィールドがTrueであるデータだけを印刷するために、 レポートのレコードソースにクエリを作成し、CKフィールドの抽出条件をTrueとします。

印刷時イベントプロシージャの作成

印刷時イベントに以下のプロシージャを作成します。
Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)

    On Error GoTo エラー発生

    'サンプルでは1ページ12部の印刷ができます。
    Const MyCount = 12
    
    If Forms!frm_sample!Op印刷設定 = 2 Then
        '1ページに全て同一のラベルを印刷します。
        If PrintCount < MyCount Then
            Me.NextRecord = False
        End If
    End If
    
    Exit Sub
    
エラー発生:

    If Err.Number = 2450 Then
        MsgBox "印刷設定フォームから実行して下さい。", vbCritical
    Else
        MsgBox "予期せぬエラーが発生しました。", vbCritical
    End If
        
    End '中止します。
        
End Sub
解説
  1. サンプルでは、1ページに12部のラベルが印刷されます。お使いのPCに合わせて適宜変更して下さい。
  2. 引数 PrintCount は、1づつ増加していきます。MyCount値以下の場合は、 NextRecordプロパティを利用して新規レコードに移動するのを停止します。
  3. エラー番号2450はレポーを直接開く場合に発生します。 このエラー番号が現れればメッセージを表示し、ユーザーに注意を促します。

印刷設定フォーム(frm_sample)の作成

下記のようなフォームを作成します。リストボックス(list選択)、オプショングループ(Op印刷設定)、コマンドボタン(Cmdコマンド)を作成します。

印刷設定フォームデザインビュー図

印刷時クリック時イベントプロシージャの作成

印刷時クリック時イベントに以下のプロシージャを作成します。

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
        Var条件 = Var条件 & IIf(Not IsNull(Var条件), ",", "") & _
        "'" & Me.list選択.Column(1, Var行) & "'" ' --- A
    Next

    strmsgA = IIf(Me.Op印刷設定 = 1, "通常印刷", "1ページに全てを印刷") '--- B
    
    strmsgB = "対象項目が何も選択されていませんので、印刷を中止します。" & _
                Chr(13) & "再度、実行して下さい。"
    strmsgC = "印刷対象者 : " & Var条件 & Chr(13) & Chr(13) & _
              "印刷設定 : " & strmsgA
    
    Select Case IsNull(Var条件)
    
        Case True
            MsgBox strmsgB, 16
        Case False
            If 1 = MsgBox(strmsgC, 1) Then
                DoCmd.OpenReport "rpt_sample", acViewPreview, "", _
                "氏名 In (" & Var条件 & ")" ' --- C
            End If
            
    End Select
    
End Sub
解説
  1. 今回の抽出条件は氏名です。データ型は文字列ですから、前後を  '  で囲みます。
  2. IIf関数を用いて、でOp印刷設定の値を分かり易い名称に変更します。
  3. OpenReportメソッドの抽出条件にIN句で変数Var条件を記述します。

フォームビュー

  1. フォームをビューモードで開きます。
  2. リストボックスから印刷対象の氏名を選択します。
  3. [印刷プレビュー]ボタンを押します。

フォームビュー図

  1. メッセージボックスが立ち上がります。

メッセージボックス図

印刷プレビュー

印刷プレビューは下記のようになります。全て同じデータが1ページに印刷されます。

印刷プレビュー図

関連ページ

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

 


宛名ラベル印刷で1ページ全てに同一データを印刷する方法 : SampleFile236


 

-Microsoft Access Club-