PR

Access フォームが参照するテーブルの切り替え

VBA

Accessでは、テーブルとフォームを1対1の関係で作ることが多いと思いますが、テーブル構造が同じ場合に、フォームをそれに合わせた分だけ作成することは、その後のメンテナンスを考えると業務量が増えて大変になります。そこで、1つのフォームから複数のテーブルを参照できる仕組みをVBAを用いて実装したいと思います。

スポンサーリンク

サンプルテーブルの作成

今回は2つのサンプルテーブルとして、「Aテーブル」と「Bテーブル」を作成します。そして、それぞれのテーブル構造は次のようにし、サンプルデータを格納します。

■Aテーブル

フィールド名 データ型
氏名_Aテーブル 短いテキスト
年齢_Aテーブル 数値型

■Aテーブルのサンプルデータ

氏名_Aテーブル 年齢_Aテーブル
佐藤 A郎 50
渡辺 A子 33

■Bテーブル

フィールド名 データ型
氏名_Bテーブル 短いテキスト
年齢_Bテーブル 数値型

■Bテーブルのサンプルデータ

氏名_Bテーブル 年齢_Bテーブル
鈴木 B郎 47
山田 B子 22

ここで、注意していただきたい点は、AテーブルとBテーブルでそのテーブル構造が同じであり、格納しているデータの内容が同じであるという点です。

例えば、入庫と出庫の情報を別々のテーブルで保存する場合に、登録する内容はほぼほぼ同じになるため、このようなテクニックを使うことができます。

サンプルフォームの作成

次に、サンプルフォームを作成します。「テーブル切替フォーム」という名称のフォームを作成し、図1に示すように2つのテキストボックスと2つのコマンドボタンを配置します。テキストボックスの名称は「t_氏名」と「t_年齢」を、コマンドボタンの名称は「cmd_A」と「cmd_B」とします。

図1 テーブル切替フォームの構成

このフォームから先に作成した「Aテーブル」と「Bテーブル」を参照できるようにVBAで実装します。まず、「テーブル切替フォーム」を開いた際に、「Aテーブル」のデータが表示されるように設定をします。プロパティシート中「読み込み時」に[イベントプロシージャ]を設定し、以下のソースコードを記入します。

Private Sub Form_Load()

'レコードソースプロパティは参照するテーブルを設定する。
Me.RecordSource = "Aテーブル"

'コントロールソースはテーブル中のフィールドを設定する。
Me.t_氏名.ControlSource = "氏名Aテーブル" 
Me.t年齢.ControlSource = "年齢_Aテーブル"

'リクエリで画面を更新する。
Me.Requery

End Sub

次に、各コマンドボタンを押すことで参照するテーブルを切り替えるようにVBAで実装します。内容は上述のコードとほとんど同じです。

まず、「cmd_A」のプロパティシートを開き、「クリック時」で[イベントプロシージャ]を設定し、以下のソースコードを記入します。

Private Sub cmd_A_Click()

'フォームのレコードソースにAテーブルを設定する。
Me.RecordSource = "Aテーブル"

'フォームの各テキストボックスに各フィールドを設定する。
Me.t_氏名.ControlSource = "氏名Aテーブル" 
Me.t年齢.ControlSource = "年齢_Aテーブル"

'画面を更新する。
Me.Requery

End Sub

同様に、「cmd_B」のプロパティシートを開き、「クリック時」で[イベントプロシージャ]を設定し、以下のソースコードを記入します。

Private Sub cmd_B_Click()

'フォームのレコードソースにBテーブルを設定する。
Me.RecordSource = "Bテーブル"

'フォームの各テキストボックスに各フィールドを設定する。
Me.t_氏名.ControlSource = "氏名Bテーブル" 
Me.t年齢.ControlSource = "年齢_Bテーブル"

'画面を更新する。
Me.Requery

End Sub

以上でフォームの作成は完了しました。

参照テーブルの切り替え確認

まずは、作成した「テーブル切替フォーム」をフォームビューで開きます。これにより、「読み込み時」におけるVBAコードがはたらきレコードソースには「Aテーブル」が、また各テキストボックスにはそれぞれに対応したAテーブル中のフィールドがセットされ、画面にはAテーブルの1レコード目が表示されます。

図2 フォーム読み込み時のデータ

続いて、「cmd_B」のコマンドボタンをクリックすると、参照先のテーブルが「Bテーブル」となり、それに対応したレコードが表示されます。

図3 参照テーブルの切り替え

この状態で、「cmd_A」をクリックすると図2の状態に戻ります。

このように、参照テーブルを切り替えることで1つのフォームで効率良くデータ入力を行えるようになります。

まとめ

今回は、1つのフォームから2つのテーブルを参照する方法を紹介しました。テーブル構造がほとんど同じで、1つのフォームで事足りるようでしたら、今回紹介した方法を用いることで、保守性を向上することができ、業務効率全体の改善を図ることもできます。ポイントは「RecordSource」プロパティと「ControlSource」プロパティを上手く使うところにあります。

この方法を上手く活用すれば、1つのフォームから複数のテーブルやクエリを参照することもできますので、用途に応じて使い分けていただければと思います。

スポンサーリンク

Kindle Unlimitedにサインアップして無料体験に登録する
Kindle Unlimitedに登録すると、人気のシリーズ、ベストセラー、名作などに好きなだけアクセスして、シームレスなデジタル読書体験を実現できます。

コメント

タイトルとURLをコピーしました