[Access VBA] サブフォーム内に表示するテーブルをボタンで出し分ける
複数のテーブルがあって、それを開くボタンを作ったとき、ユーザーによっては意外と「別タブで開く」のが苦手な人がいるんだなぁと。そこで、別フォームへ遷移してサブフォーム内にテーブルを表示してみる、という方式を試してみました。
完成形
テーブルが3つありまして。「F_メニュー」フォームに、それぞれのテーブル名をキャプションに書いたボタンを3つ作ってあります。単純にこのボタンをクリックしたらそのテーブルが開く、というのなら
Private Sub ボタン名_Click() DoCmd.OpenTable "テーブル名" End Sub
と書けばそれでおしまいなんですけど。
ボタンをクリックしたら、「F_テーブル表示」フォームへ遷移して、設置してあるサブフォームで「クリックしたボタンに書かれていたテーブル」を表示する、という方式にしてみます。押されたボタンによって表示するテーブルを切り替えて、さらにサブフォームのラベルもそのテーブル名が表示されるようにしたらスマートに使えるかなぁと。
フォームを遷移っぽく見せるのは前書いたこちらの記事をご参照ください。
実装
「F_メニュー」フォーム
各ボタン上に表示されている文字列は、ボタンの「標題」というプロパティです。VBAで指定するのは「名前」のほうなので、プロパティシートにてそれぞれ上図のように設定しておきます。
このフォームモジュールに書くコードが以下です。
Private Sub btn_T1_Click() '「T1」ボタンクリック時 Call openTable(Me.ActiveControl.Caption) '押されたボタンのキャプション(標題)を引数としてopenTableを呼び出し End Sub Private Sub btn_T2_Click() '「T2」ボタンクリック時 Call openTable(Me.ActiveControl.Caption) End Sub Private Sub btn_T3_Click() '「T3」ボタンクリック時 Call openTable(Me.ActiveControl.Caption) End Sub Private Sub openTable(tableName As String) DoCmd.OpenForm "F_テーブル表示", , , , , , tableName '「F_テーブル表示」を開く DoCmd.Close acForm, Me.Name End Sub
「標題」はVBAでは「キャプション」になります。
14行目、OpenFormメソッドは第7引数にOpenArgs
というパラメータを設定することができます。これが結構便利で、自由度の高い値を引き渡すことができるので、ここへ各ボタンがクリックされたときのキャプション(標題)を持ってきて、設定しています。
OpenFormメソッドのパラメータ一覧はこちらを参照してください。
「F_テーブル表示」フォーム
こちらも、各コントロールは図のように設定しておきます。サブフォームは、開くときにその都度ソースオブジェクトを設定するので、設計の段階では非連結で構いません。
このフォームモジュールに書くコードが以下です。
Private Sub Form_Load() Dim tableName As String: tableName = Me.OpenArgs 'OpenArgsをテーブル名として取得 Me.lbl_テーブル名.Caption = tableName 'ラベルのキャプション(標題)を設定 Me.sbf_共通.SourceObject = "テーブル." & tableName 'サブフォームのソースオブジェクトを設定 Me.sbf_共通.SetFocus 'サブフォームをアクティブに DoCmd.GoToRecord , , acLast '最後のレコードを選択 End Sub Private Sub btn_戻る_Click() DoCmd.OpenForm "F_メニュー" DoCmd.Close acForm, Me.Name End Sub
前段階のOpenFormメソッドで指定したテーブル名を、ラベルとサブフォームのソースオブジェクトへそれぞれ設定します。ソースオブジェクトは「オブジェクトの種類.オブジェクト名」としなければならないので、クエリだったら「クエリ.○○」など、変更が必要です。
開いたテーブルのレコード数が多くて最後のレコードがいつも見えるようにしておきたい場合は、5, 6行のように書くとよいですね。
以上です! なんと今日は平成最後の日でした~! 令和でもよろしくおねがいいたします!!
コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)
YouTubeでQ&Aコンテンツを企画しています
運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。