この記事は PDF ダウンロードでもご利用いただけます。
原則として、ユーザーにテーブルや
クエリへのアクセスは許可しません。ユーザーはフォームを介してデータを参照し、操作するのが一般的です。場合
によっては、フォームビューでデータを印刷したい場合もあるでしょう。Access はフォームビューをサポートしていますが、
いくつかの制限があります。[印刷] ボタンをクリックするか、[ファイル]
メニューから [印刷] を選択すると、現在のレコードだけでなく、基になるレコードセット内のすべてのレコードが印刷されます
。
現在のレコードのみを印刷するには、 「印刷」ダイアログボックス
の「印刷範囲」セクションで「選択したレコード」を選択する必要があります
。ほとんどのユーザーはAccessの操作に慣れていないため、
自分で操作方法を理解できません。もちろん、ユーザーに説明することは可能ですし、
個々のレコードを印刷する必要がたまにしかないのであれば、おそらく十分な
解決策でしょう。しかし、個々のレコードを頻繁に印刷するユーザーにとっては、この余分な手順は
すぐに面倒なものになるでしょう。
自動化された単一レコード印刷
図A
に示すフォームを使えば、単一レコードの印刷プロセスを簡単に自動化できます。
このフォームは、Accessに付属するサンプルデータベースであるNorthwindのEmployeesテーブルにバインドされています
が、ほとんどすべてのフォームを使用できます。表示フォームにコマンドボタンを追加するだけで
、ユーザーはフォーム上のボタンをクリックするだけで
、組み込みの印刷オプションは使用できなくなります。ただし、これらの
オプションはいずれにしても無効にすることになるでしょう。この方法には1つの要件があります。テーブルには、
各レコードに一意の値を持つフィールドが含まれている必要があります。単一フィールドの主キー
またはオートナンバー型フィールドで十分です。
図A |
![]() |
ユーザーは、「レコードの印刷」ボタンをクリックして、現在のレコードのみを印刷できます。 |
まず、デザインビューでサンプルフォームを開き、
コマンドボタンを挿入します。ボタンの名前を「cmdPrint」とし、 「Caption」プロパティに「Print Record」と入力します。次に、フォームデザインツールバーの「コード」ボタンをクリックして
フォームのモジュールを起動し、リストAのコードを入力します。Accessに戻り、
フォームを保存して閉じます。
リストA
プライベートサブ cmdPrint_Click() '現在のレコードを印刷 'rptEmployees を使用します。 IsNull(Me!EmployeeID) の場合 MsgBox "有効なレコードを選択してください", _ vbOKOnly、「エラー」 サブを終了 終了条件 DoCmd.OpenReport "rptEmployees"、、、_ "従業員ID = " & 私!従業員ID 終了サブ
渡されるEmployeeID値は数値であるため、フィールド参照を区切る必要がないことに注意してください。
テキストフィールドまたは日付フィールドを参照する場合は、
それぞれアポストロフィ(')またはシャープ(#)を使用して、以下の形式で値を区切ります。
"従業員ID = ' " & Me!従業員ID & " ' " "従業員ID = # " & Me!従業員ID & " # "
図Bのようなシンプルなレポートも必要です。(データベースウィンドウからこの連結レポートを開くと
、データソースのすべてのレコードが表示されます。)
レポートに主キーの値を表示する必要はありませんが、表示することも可能です。
フォームとレポートを同じデータソースに連結するのが理想的ですが、
必須ではありません。レポートを作成したら、保存して閉じます。
図B |
![]() |
このレポートでは、すべての従業員または 1 人の従業員のみを表示できます。 |
これで、従業員レコードを1件印刷する準備が整いました。
サンプルフォームをフォームビューで開き、レコードを参照します。選択した
レコードを印刷するには、「レコードの印刷」ボタンをクリックするだけです。これにより、現在の
レコードの主キー値(この例ではEmployeeID
フィールド)がOpenReportメソッドを介してレポートに渡されます。レポートは、
渡された値と一致するEmployeeIDを持つレコードのみを取得します。例えば、
Janet Leverlingのレコードが現在のレコードの場合、サブプロシージャは彼女のEmployeeID値3を
OpenReportメソッドに渡します。その結果、メソッドのwhere引数は次のように評価されます。
"従業員ID = " & 私!従業員ID 従業員ID = 3
Accessはレポートを表示せずに、現在のレコードを直ちにプリンタに送信します。印刷結果は
図Bに示すレポートと似ていますが、レコードは1つだけです。デフォルトでは、OpenReportのview引数は内部定数
acViewNormalに設定されており、レポートを直接プリンタに送信します。
レポートを表示するには、代わりにacViewPreview定数を使用してください。
このサブプロシージャは空白のレコードではなく、
レコードの一部のみを印刷します。主キーフィールドに値が含まれている場合、Accessはレコードを印刷します。主キーフィールドがNULLの場合、図C
に示す
メッセージボックスが表示されます。
新しいレコードを参照して「レコードの印刷」ボタンをクリックすると、実際に印刷結果を確認できます。
図C |
![]() |
Access は空白のレコードを印刷しません。 |
印刷して!印刷して!
Accessでは、フォームビューでレコードを参照しながらデータを印刷できますが、
現在のレコードだけで
なく、基になるレコードセット内のすべてのレコードが印刷されます。ここで説明するコマンドボタンとサブプロシージャを追加することで、
組み込みの印刷ルーチンに代わる、
現在のレコードのみを印刷する印刷ボタンをユーザーに提供できます。
著者について
Susan Sales Harkinsは独立コンサルタントであり、
データベース技術に関する多数の記事や書籍を執筆しています。最新
刊は、
Mike Gunderloyとの共著『Mastering SQL Server 2005 Express』 (
Sybex社刊)です。Gunderloyとの共著には、 『Automating Microsoft Access 2003 with VBA』 (Que社刊) 、『Upgrader’s Guide to Microsoft Office System 2003』(ICDL Exam Cram 2)、『Absolute
Beginner's Guide to Microsoft Access 2003』(いずれもQue社刊)などがあります。現在、
Susanはhttp://www.databaseadvisors.comのDatabase Advisorsで出版ディレクターとしてボランティア活動を行っています。
連絡先は[email protected]です。