Accessのフォームでフィルターを実行した後、そのフィルターのデータをそのままレポートへ出力する方法です。
フィルターが実行されていない場合は、メッセージを表示します。
コードビルダーとマクロビルダーで解説します。
参考ここでのウィンドウの表示は、[ウィンドウを重ねて表示する]です。[ウィンドウを重ねて表示する]と[タブ付きドキュメント]の違いについては、以下の記事で解説しています。
-
[タブ付きドキュメント]と[ウィンドウを重ねて表示する]の違い
Access2007以降、オブジェクトを表示すると、タブ付きウィンドウで表示されるようになっています。 昔からAccessを使用している方に ...
[コードビルダー]と[マクロビルダー]を使用する方法を記していますが、どちらも動作は同じです。その相違については、以下の記事で解説しています。
-
マクロアクション(マクロビルダー)とVBA(コードビルダー)
Accessでは、マクロアクション(マクロの実行アクション)やVBA(Visual Basic for Applications)を使って一 ...
分割フォームの作成
テーブルやクエリを基に分割フォームを作成します。
ここでは、クエリ[Q_売上]を基に分割フォームを作成しています。
クエリ[Q_売上]を選択して、[作成]タブの[フォーム]グループにある[その他のフォーム]の▼ボタンをクリックします。
その中にある[分割フォーム]をクリックします。
ポップヒントには以下のように記されています。
注意ポップヒントでは上にデータシート、下にフォームが表示されるように記されていますが、上下が反対になる場合もあります。
分割フォーム
分割フォームを作成します。分割フォームの上のセクションにはデータシートが表示され、下のセクションにはデータシートで選択したレコードの情報を入力するためのフォームが表示されます。
分割フォームは、Access2007からの機能ですがフォームビューとデータシートビューを同時に表示できるので、とても便利です。
分割フォームについては、以下の記事を参照してください。
-
分割フォーム(単票フォームとデータシートを同時に表示)の作成と使い方
Accessでは、画面を2つに分け[単票フォーム]と[データシート]を同時に表示できる[分割フォーム]というのがあります。Access200 ...
分割フォームでは、データシートビューのプルダウンからフィルターをかけることができます。
このフィルターで抽出したデータを、そのままレポートへ出力する方法を解説します。
フィルターボタンをクリックしてもリストが表示されない場合
レコード数が1000を超えているとフィルターボタンをクリックしても、リストが表示されない場合があります。
これは、[Accessのオプション]で設定を変更して解決できます。
[ファイル]タブをクリックした後、[オプション]をクリックして、[Accessのオプション]ダイアログボックスを表示します。
または、キーボードから[Alt]→[F]→[T]の順に押して表示します。これは、Word、Excel、PowerPointなどでも使用できます。
[現在のデータベース]の[レコード数が次の値を超えるとリストを表示しない]が既定では[1,000]になっていますので、この値をレコード数より大きい数値に変更します。
以下の記事でも解説しています。
レポートの作成
レポートは、フォームと同じレコードソースで作成しておきます。
レポートの名前は[R_売上一覧]とします。
レポートへ出力ボタンの作成(コードビルダー)
フィルター実行後、レポートへ出力するためのボタンを作成します。
フォームをデザインビューで開きます。
[デザイン]タブにある[コントロールグループ]にある[ボタン]をクリックして、フォームヘッダーでドラッグしてボタンを作成します。
ウィザードが表示されたら[キャンセル]ボタンをクリックして閉じます。
コマンドボタンのプロパティを表示します。
[すべて]タブをクリックして、コマンドボタンの[名前]と[標題]を入力します。
[イベント]タブをクリックして、[クリック時]の[...]ボタンをクリックします。
[ビルダーの選択]ダイアログボックスが表示されたら、[コードビルダー]を選択して[OK]ボタンをクリックします。
VBEが表示されたら、以下のように入力します。
フィルターを実行していないときは、「先にフィルターを実行してください!」というメッセージボックスを表示して、それ以外は、レポート[R_売上一覧]のレポートビューとして出力します。
参考印刷プレビューで表示したい場合は、[acViewPeport]を[acPreview]に変えてください。
また、MsgBox関数については以下で解説しています。いろいろ工夫してみてください。
[Me.]は省略してもかまいません。
If Me.FilterOn = False Then
MsgBox "先にフィルターを実行してください!"
Else
DoCmd.OpenReport "R_売上一覧", acViewReport, , Me.Filter
End If
コマンドボタンのプロパティ[クリック時]には、[イベントプロシージャ]と表示されます。
レポートへ出力ボタンの作成(マクロビルダー)
埋め込みマクロで設定する方法です。
[レポートへ出力]ボタンの作成までは上記の解説と同じです。
[イベント]タブをクリックして、[クリック時]の[...]ボタンをクリックします。
[ビルダーの選択]ダイアログボックスが表示されたら、[マクロビルダー]を選択して[OK]ボタンをクリックします。
マクロツールが表示されます。
[新しいアクションの追加]の▼をクリックして、[If]を選択します。
テキストボックスに以下を入力します。
そして、[新しいアクションの追加]に[メッセージボックス]を選択します。
[メッセージボックス]の[メッセージ]に以下のように入力します。
先にフィルターを実行してください!
メッセージの種類やタイトルなどについては、以下を参考にしてください。
マクロビルダーの[メッセージの種類]は以下の4つがあります。ここでは[なし]を選択しています。
メッセージのタイトルは、任意の文字を入力します。空白にした場合は、[Microsoft Access]と表示されます。
Accessのオプションでアプリケーションタイトルを入力している場合は、そのタイトルが表示されます。
そして、[Elseの追加]をクリックします。
そして、[新しいアクションの追加]で[レポートを開く]を選択します。
[レポートを開く]の[レポート名]に[R_売上一覧]を選択します。
以下は、[ビュー]は[レポート]を選択していますが、印刷プレビューで表示したい場合は[印刷プレビュー]を選択してください。
[Where条件式]には、以下のように入力します。先頭に[=]を入力します。
角括弧は、自動で追加されます。
=filter
上書き保存して[閉じる]ボタンをクリックして閉じます。
再度、マクロツールを開いて以下のようになっていればOKです。
コマンドボタンのプロパティ[クリック時]には、[埋め込みマクロ]と表示されます。
[フィルター解除]ボタンの作成
もう1つフィルターを解除するためのボタンを作成します。
同じように[デザイン]タブにある[コントロールグループ]にある[ボタン]をクリックして、フォームヘッダーでドラッグしてボタンを作成します。
ウィザードが表示されたら[キャンセル]ボタンをクリックして閉じます。
コマンドボタンのプロパティを表示します。
[すべて]タブをクリックして、コマンドボタンの名前と標題を入力します。
コードビルダーで設定
[イベント]タブをクリックして、[クリック時]の[...]ボタンをクリックします。
[ビルダーの選択]ダイアログボックスが表示されたら、[コードビルダー]を選択して[OK]ボタンをクリックします。
今度は、以下のように入力します。
Me.FilterOn = False
マクロビルダーで設定
マクロビルダーで設定する場合は、[ビルダーの選択]ダイアログボックスで、[マクロビルダー]を選択します。
そして、[新しいアクションの追加]で[フィルター/並べ替えの解除]を選択します。
以下のようになります。
参考アクションは、[全レコードの表示]でもかまいません。
ボタンをクリックして実行
これで実行してみてください。
フィルターを実行していないときは、下のようにメッセージウィンドウが表示されます。
参考レポートでレコードを抽出して印刷する方法については、以下の記事で解説しています。
-
レポートビューでフィルターをかけてレコードを抽出して印刷
Accessのレポートでフィルターをかけて、一部の情報のみを印刷したいことがあると思います。 レポートのフィルターを実行するには、レポートビ ...
印刷するレコードがない場合にメッセージを表示するには、レポートの[空データ時]イベントで設定します。
-
印刷するレコードがない場合はメッセージを表示して印刷を中止する
Accessのレポートで印刷を実行しようとしても、該当するデータがない場合があります。 印刷プレビューで確認すれば、印刷を実行せずに済むかも ...