Accessフォーム上でクエリ画面のような表示をさせたい場合に便利な方法として、「データシートビュー」があります。
これは、単票形式、帳票形式とも異なり、その名のとおりにデータシートでの表示が可能で、またヘッダー部分でデータのフィルタリング等もできるため非常に便利です。
今回は、フォームのデータシートビューを用いて表形式での出力をどのように実現するかを紹介します。
メインフォームの作成
まずは、外枠のフォームとして「F_メイン」フォームを作成しましょう。フォームの作成に際して、最初は詳細セクションしか表示されていませんので、フォームヘッダーを追加します。
追加方法は、図1に示すように「詳細」セクション横の四角い箇所(赤枠)を右クリックし、「フォームヘッダー/フッター」を選択します。
続いて、「F_メイン」フォームのプロパティを設定していきます。
図2に示すように、赤枠部をクリックした後、「プロパティシート」を開き、以下の設定にします。
■「F_メイン」のプロパティ設定
・自動中央寄せ: はい
・画面に合わせる: いいえ
・レコードセレクタ: いいえ
・移動ボタン: いいえ
・区切り線: はい
・スクロールバー: なし
・閉じるボタン: いいえ
ここで設定した内容は、次に作成するサブフォームとの画面設定がバッティングしないようにするための処置です。
続いて、サンプルテーブルを用意していきます。
サンプルテーブルの作成
今回作成するサンプルテーブルは、すでに用意されているサンプルデータをインポートすることで準備します。
サンプルデータはExcelファイルで用意した以下の「データシートビュー用データ.xlsx」です。
そして、Excelファイルをインポート処理する方法については、以下の記事をご参照ください。
これで、図3のようにサンプルデータをインポートできたと思いますので、「T_サンプルテーブル」と名付けます。
このデータをデータシートビューで閲覧できるように、次に、サブフォームを作成していきます。
サブフォームの作成
データシートビューとして表示するためのサブフォームとして「F_SUB」フォームを図4のように作成します。
そして、「F_SUB」フォームのプロパティシートを開き、以下の設定をします(図5)。
■「F_SUB」のプロパティ設定
・レコードソース: SELECT * FROM T_サンプルデータ;
・既定のビュー: データシート
ここで、フォームのレコードソースには直接SQL文を設定することができますので、今回は「T_サンプルデータ」テーブルの全てのフィールドを表示できるようにしています。SQL文の学習については、以下の書籍が参考になると思いますので、一読いただければと思います。
また、今回のポイントとして「既定のビュー」を「データシート」としていますが、これによりフォーム上の各コントロールソースが表形式で出力されるようになります。
このため、図6のようにフォームデザインツールの「既存のフィールド追加」を選択し、対象フィールドを全て選択した後、「F_SUB」フォームの詳細セクションにドラッグアンドドロップします。
以上で、「F_SUB」フォームの作成は完了となるため、「F_メイン」フォームと連携を図るための設定をしていきます。
メインフォームとサブフォームの連携
「F_メイン」フォーム上に「F_SUB」フォームを設定する方法を見ていきましょう。
「F_メイン」フォームを改めて開き、図7に示すようにフォームデザインツールで「サブフォーム/サブレポート」を選択し、「F_メイン」フォームの「詳細」セクション全体にオブジェクトを貼り付けます。
さらに、貼り付けた「サブフォーム/サブレポート」のプロパティシートを開き、以下のように設定します(図8)。
■サブフォームのプロパティ設定
・名前: F_SUB
・ソースオブジェクト: F_SUB
→ ソースオブジェクトを設定した段階で画面が図8のようになります。
フォームビューでの確認
さて、ここまでで一通りの設定ができましたので、どのように表示されるかを確認してみましょう。「F_メイン」フォームをフォームビューで開いてみてください。
すると、図9のような結果が得られると思います。
いかがでしょうか。これでもデータシートビューとしてそれらしい結果にはなっていますが、列順がバラバラで、列幅も短いため値が途中で切れています。
また、ディスプレイのサイズによっては見切れも発生します。
以上の点を踏まえて、表示画面をより良くするために、次からその方法を見ていきましょう。
表示画面をより良くするために
改めて「F_メイン」フォームをデザインビューで開き、図10で示す赤枠部をクリックした後、「プロパティシート」を開きます。続いて、「サイズ変更時」プロパティを[イベントプロシージャ]とします。
そして、VBA画面([イベントプロシージャ]右横の「…」をクリックすると表示されます。)で「F_メイン」フォームに対して次のコードを実装します。
Private Sub Form_Resize() On Error GoTo Err_FR 'ウィンドウサイズによる列幅長の調整 Me.F_SUB.Height = WindowHeight - 630 - Me.Section(1).Height Me.F_SUB.Width = WindowWidth - 300 '文字切れするフィールドの長さ調整 Me.F_SUB.Form!氏名フリガナ.ColumnWidth = 2250 Me.F_SUB.Form!電話番号.ColumnWidth = 2150 Me.F_SUB.Form!メールアドレス.ColumnWidth = 3250 Exit_FR: Exit Sub Err_FR: MsgBox Err.Description Resume Exit_FR End Sub
このコードでは、ウィンドウサイズを取得し、「F_SUB」フォームが「F_メイン」フォームの詳細セクションに適切に展開されるように設定しています。
その次に、「F_SUB」で表示される各フィールドの内、文字切れが発生する列の幅を「ColumnWidth」を用いて調整する設定をしています。なお、「F_メイン」フォームから「F_SUB」サブフォームの各コントロールを参照する場合の記載方法には注意してください。(参照方法については以下の記事をご参照ください。)
さらに、図9では各フィールドの順番が「T_サンプルテーブル」で設定した順番とは異なっていますので、これらを整理していきます。
実は、データシートビューの列順は、各テキストボックスのプロパティシートの「タブ移動順」プロパティの値に一致しますので、これを表示させたい順番にします(図11)。
なお、タブ移動順の値は「0」から開始となりますのでご注意ください。
以上で、細かい箇所の設定が完了しましたので、改めてフォームビューで表示内容を確認してみます。
すると、図12のような結果として列順、列幅が適切に表示されている結果が得られたと思います。
まとめ
今回は、データシート設定を活用してAccessフォーム上で表形式表示する方法を紹介しました。
データシート部分のヘッダー部で値のフィルタリング等もでき、Excelに慣れているユーザーが容易に必要な情報を閲覧できるようにするための一つのテクニックになると思いますので、是非活用してみてください。
Accessに興味を持たれた方は、是非お手元に用意されてみてはいかがでしょうか。
スポンサーリンク
コメント