フォームビューで単一の Microsoft Access レコードを印刷するにはどうすればいいですか? - TechRepublic

フォームビューで単一の Microsoft Access レコードを印刷するにはどうすればいいですか? - TechRepublic

この記事は 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]です。





Tagged: