レポートの出力指示
レポートの元になっているテーブルのデータを無条件で全て出力する場合には、レポートを開くメソッドを組み込んだボタンをメニューに貼り付ければ終わりですが、大抵は何かしらの条件で抽出したいと思います。
その時はレポートの出力指示画面を用意します。そこで、様々な抽出条件を指定したり、場合によっては並び替え方法とか、プレビューするか実際に印刷するかの判断をさせたりもします。
ここでどんな条件で抽出したいかを決めていくのがまさに仕様決めでユーザーと綿密に決める必要があります。例えば今回は以下のようにデザインしました。抽出条件は以下のような意味を持たせます。
生徒番号:生徒番号のFROM~TOの範囲指定にします。何も入力しなければ、条件を指定しなかったと見なし、全ての生徒番号が対象になります。FROMのみ入力すれば、その番号以降全て、TOのみ入力すれば、その番号以前全てを対象とします。同じ番号を入力すればその番号のみが対象となります。
生徒姓かな:前方一致のワイルド検索とします。つまり、先頭から見て入力したかなが一致し、それ以降は何でもよしとします。例えば「こん」と入力すれば「こんの」でも「こんどう」でも対象とされます。ここでも何も入力しなければ全てが対象となります。
入学年月日:生徒番号と同様、入学年月日のFROM~TOの範囲指定にします。
尚、上記3つの条件を同時に入力した場合は、AND条件となります。逆に条件を何も入力しなければ全てのレコードが対象となるわけです。

この指示画面のプロパティを見てみましょう。通常の入力画面とは違い、レコードソースのない非連結フォームとします。メニューやこういった条件指示画面はテーブルと関連するわけではないので、非連結とします。
ここでのポイントは境界線スタイルです。「ダイアログ」とはWINDOWSの所謂ダイアログボックスのイメージです。つまり、常に前面に表示されていて、このフォームを閉じない限り他のウインドウの操作はできない状態にします。
プレビューボタンをクリック時のイベントとして以下のように記述します。
レポート名の次にパラメータを指定でき、acViewPreviewはプレビュー表示を意味し、印刷する場合は、acViewNormalとします。
レポートを出力する前に「Me.Visible = False」というコードがありますが、指示画面を非表示にするという事です。 これがないと、プレビューしたレポートが指示画面の裏に隠れてしまいます。 というのは指示画面がダイアログになったいるので、常に前面に表示されてしまうからです。 それでは閉じてしまえばいいのではと思いますが、それもダメです。 レポートのレコードソースで指示画面に入力されている値を参照しているので、 閉じてしまうと参照エラーになってしまうからです。
次にレポートのレコードソースを見ていきましょう。生徒番号の抽出条件として以下を追加します。 フィールド欄にちょっと複雑な式を記述する必要があります。抽出条件欄には「True」と指定します。
ズーム表示して見てみます。
この式の意味は、F_生徒一覧範囲指定フォームの開始生徒番号がNullの場合は何も条件を指定しなかったと見なし、Null以外の場合は、T_生徒番号の生徒番号がフォームの開始生徒番号以上のものを対象とします。
IIF()関数:IIF(評価式,評価式が真だった場合の値又は式,評価式が偽だった場合の値又は式)
真だった場合にはフィールド欄と抽出条件欄がTrue=Trueとなるので、特に何も条件を指定しなかったと見なすのです。
終了生徒番号の場合は、不等号が変わります。
入学年月日も考え方は全く同様です。
姓かなはワイルド検索になるので、Like演算子を使う必要があります。使い方としては例えば姓かなの先頭が「こん」で始まるレコードを抽出したい場合には、以下のように指定します。
姓かな Like "こん*"
「こん」の部分がフォームからの変数になるので、上記のように指定します。
最後にレポート閉じる時の処理として以下を加えます。これはレポートを開くときにVisible = falseにしたので、元に戻す為です。
Forms!F_生徒一覧範囲指定.Visible = True
メニューにF_生徒一覧範囲を開くボタンを追加して終わりです。以下に今までの作った分のDBをダウンロード出来るようにしておきます。
http://www.mindaccess.com/download/20110107sample.zip
これで一通り、レポートの機能を解説しました。まだまだACCESSの豊富な機能は紹介し切れていませんが、いずれ応用編の方で紹介できる機会があると思います。
次回はクエリーについて話を進めていきたいと思います。今回のレポートを作成していく中でも既にクエリーを使用していたのですが、次回以降はちょっと趣向を変えて問題形式でクエリーについて詳しく解説していこうと思います。
その時はレポートの出力指示画面を用意します。そこで、様々な抽出条件を指定したり、場合によっては並び替え方法とか、プレビューするか実際に印刷するかの判断をさせたりもします。
ここでどんな条件で抽出したいかを決めていくのがまさに仕様決めでユーザーと綿密に決める必要があります。例えば今回は以下のようにデザインしました。抽出条件は以下のような意味を持たせます。
生徒番号:生徒番号のFROM~TOの範囲指定にします。何も入力しなければ、条件を指定しなかったと見なし、全ての生徒番号が対象になります。FROMのみ入力すれば、その番号以降全て、TOのみ入力すれば、その番号以前全てを対象とします。同じ番号を入力すればその番号のみが対象となります。
生徒姓かな:前方一致のワイルド検索とします。つまり、先頭から見て入力したかなが一致し、それ以降は何でもよしとします。例えば「こん」と入力すれば「こんの」でも「こんどう」でも対象とされます。ここでも何も入力しなければ全てが対象となります。
入学年月日:生徒番号と同様、入学年月日のFROM~TOの範囲指定にします。
尚、上記3つの条件を同時に入力した場合は、AND条件となります。逆に条件を何も入力しなければ全てのレコードが対象となるわけです。

この指示画面のプロパティを見てみましょう。通常の入力画面とは違い、レコードソースのない非連結フォームとします。メニューやこういった条件指示画面はテーブルと関連するわけではないので、非連結とします。

ここでのポイントは境界線スタイルです。「ダイアログ」とはWINDOWSの所謂ダイアログボックスのイメージです。つまり、常に前面に表示されていて、このフォームを閉じない限り他のウインドウの操作はできない状態にします。
プレビューボタンをクリック時のイベントとして以下のように記述します。
Private Sub プレビュー_Click()
If Not IsNull(Me!開始生徒番号) And Not IsNull(Me!終了生徒番号) Then
If Me!開始生徒番号 > Me!終了生徒番号 Then
Beep
MsgBox "生徒番号の指定が間違っています。"
Me!開始生徒番号.SetFocus
Exit Sub
End If
End If
If Not IsNull(Me!開始入学年月日) And Not IsNull(Me!終了入学年月日) Then
If Me!開始入学年月日 > Me!終了入学年月日 Then
Beep
MsgBox "入学年月日の指定が間違っています。"
Me!終了入学年月日.SetFocus
Exit Sub
End If
End If
Me.Visible = False
DoCmd.OpenReport "R_生徒一覧", acViewPreview
End Sub
開始生徒番号と終了生徒番号がNullでなかった場合には、開始と終了の順が逆だった場合にエラーにします。入学年月日も同様のチェックをします。エラーが無かった場合、Docmd.OpenReportメソッドを使用し、レポートを出力します。レポート名の次にパラメータを指定でき、acViewPreviewはプレビュー表示を意味し、印刷する場合は、acViewNormalとします。
レポートを出力する前に「Me.Visible = False」というコードがありますが、指示画面を非表示にするという事です。 これがないと、プレビューしたレポートが指示画面の裏に隠れてしまいます。 というのは指示画面がダイアログになったいるので、常に前面に表示されてしまうからです。 それでは閉じてしまえばいいのではと思いますが、それもダメです。 レポートのレコードソースで指示画面に入力されている値を参照しているので、 閉じてしまうと参照エラーになってしまうからです。
次にレポートのレコードソースを見ていきましょう。生徒番号の抽出条件として以下を追加します。 フィールド欄にちょっと複雑な式を記述する必要があります。抽出条件欄には「True」と指定します。

ズーム表示して見てみます。

この式の意味は、F_生徒一覧範囲指定フォームの開始生徒番号がNullの場合は何も条件を指定しなかったと見なし、Null以外の場合は、T_生徒番号の生徒番号がフォームの開始生徒番号以上のものを対象とします。
IIF()関数:IIF(評価式,評価式が真だった場合の値又は式,評価式が偽だった場合の値又は式)
真だった場合にはフィールド欄と抽出条件欄がTrue=Trueとなるので、特に何も条件を指定しなかったと見なすのです。
終了生徒番号の場合は、不等号が変わります。

入学年月日も考え方は全く同様です。


姓かなはワイルド検索になるので、Like演算子を使う必要があります。使い方としては例えば姓かなの先頭が「こん」で始まるレコードを抽出したい場合には、以下のように指定します。
姓かな Like "こん*"

「こん」の部分がフォームからの変数になるので、上記のように指定します。
最後にレポート閉じる時の処理として以下を加えます。これはレポートを開くときにVisible = falseにしたので、元に戻す為です。
Forms!F_生徒一覧範囲指定.Visible = True
メニューにF_生徒一覧範囲を開くボタンを追加して終わりです。以下に今までの作った分のDBをダウンロード出来るようにしておきます。
http://www.mindaccess.com/download/20110107sample.zip
これで一通り、レポートの機能を解説しました。まだまだACCESSの豊富な機能は紹介し切れていませんが、いずれ応用編の方で紹介できる機会があると思います。
次回はクエリーについて話を進めていきたいと思います。今回のレポートを作成していく中でも既にクエリーを使用していたのですが、次回以降はちょっと趣向を変えて問題形式でクエリーについて詳しく解説していこうと思います。
スポンサーサイト