やりたいこと
注文票に何度も登場する顧客名と住所を別テーブルで管理。
注文票に投入するとき、顧客名を選択するだけで、別フィールドの住所が勝手に埋まる、というものを作りたい。
※ExcelだとVlookupに相当するもの。
オートルックアップという便利なものがあるようですが、リレーションシップを使いこなせていない初心者であり、取り急ぎ作成する必要があったので、自分の中では直感的に作成できる、この方法で作成。
あとは追々覚えていこうと思います。
下準備
2つのテーブルを準備する。
1つ目のテーブル「顧客データ」。
以降、顧客情報を変更するときはこのテーブルを編集する。
2つ目のテーブル「注文票」。
注文が発生する都度、投入するもの。
注文票のテーブルで「顧客名」のところは、「顧客データ」テーブルの値でプルダウンさせます。
注文票――顧客名
列幅を以下のようにするのがポイント
0cm;5cm;0cm
注文票――住所
列幅を以下のようにするのがポイント
0cm;0cm;2.542cm
顧客テーブルは「ID」「会員」「住所」「メルアド」というフィールドを持っています。
注文票テーブルで「会員」だけプルダウン選択していると見せかけて、実はすべてのフィールドが格納されています。
列数「3」とは、「ID」「会員」「住所」のこと。
列幅とは、「ID」=0cm、「会員」=5cm、「住所」=0cmのこと。
プルダウン時に1フィールドだけ見えていた方が選択しやすいと思うので、こうします。
0cmは非表示になっていますが、データは格納されています。
テーブルの中で直接、1つのフィールド値をキーにした表示フィールドを作成することはできませんでした。
テーブルに直接手投入する場合のショートカットとしてエクセルを利用していた人は困りますね。
でも、投入専用フォームを作成してしまえば、この問題は解決しました。
投入専用フォームを作成する
まずは「注文票」に1レコード追加するためのフォームを作成しましょう。
「顧客名」の「更新後処理」にマクロを加えます。
至ってシンプルなものです。
値の代入を追加します。
アイテムに[住所]、式には[顧客名]、と記述します。
これはつまり、「顧客名」というテキストボックスに投入された値を、「住所」というテキストボックスに代入しなさいね、という命令です。
普通なら完全に同じ見た目の値が代入されます。
しかし今回は「顧客名」も「住所」も、同じテーブルから同じデータを持ってきていますが、表示するフィールドを変えています。
そのため、顧客名で投入された値と同じ値が住所にも投入されているんですが、見た目は別のデータが表示されている、というわけです。
住所が登録されたことが分かったら、注文テーブルの一覧を見てみてください。
思い通りのデータが投入されていると思います。
今回のマクロは「顧客名が投入されたあと(更新された後)に住所を投入する」というものです。
そのため、以前投入していたデータの値はそのままです。
改めて投稿フォームを開いて投入し直さないと、新しいデータは反映しません。
以前のままのデータを残したい場面もありますので、ここは利用用途に合わせると良いでしょう。
一括でデータ変更したい場合は更新クエリの利用をお勧めします。