コンボボックスをネストさせるお手本データベース

図2-2-1 商品区分コードと商品コードのコンボボックスを連動させた例(コンボボックスを常時表示)

図2-2-2 商品区分コードと商品コードのコンボボックスを連動させた例(コンボボックスを随時表示)
このサンプルデータベースは、受注明細のサブフォームで使用している商品区分コードと商品コードのコンボボックスをネスト(商品コードのコンボボックスには、商品区分コードのコンボボックスで選択したアイテムのみ表示させるように連動させる)させています。受注明細のサブフォームから商品コードを入力するとき、アイテム数が多いと検索するのに時間がかかります。この場合、商品区分コードで商品コードを絞り込んでから検索すると効率の良い検索ができます。サンプルデータベースでは、商品区分コードと商品コードのコンボボックスをネストさせる方法を2種類紹介します。図2-2-1のフォームでは、商品区分コードと商品コードのコンボボックスを常時表示させます。図2-2-2のフォームでは、商品区分コードと商品コードがフォーカスを取得したときのみコンボボックスを表示します。
サンプルデータベース(CH2-2.mdb)では、以下のノウハウを習得することができます。
◆ データシートに作成した複数のコンボボックスをネストさせる方法
(データシート形式のフォームにコンボボックスを作成した場合、
コンボボックスがレコード毎に独立していないためネストさせても正常に動作しません)
◆ テキストボックスを実行時コンボボックスに切り替える方法
◆ アプリ独自のカーソルを表示する方法
● サンプルデータベースに必要なテーブルを用意する
1 Accessを起動して作業フォルダに、新規データベース CH2-2.mdbを作成します。
2 ファイルメニューから外部データの取り込み、インポートをクリックします。インポートのダイアログが表示されたら、Accessのサンプルデータベース Northwind.mdbを選択してインポートボタンをクリックします。オブジェクトのインポートダイアログが表示されたら、テーブルタブをクリックして、社員、商品、商品区分、得意先テーブルを選択します。最後に、OKボタンをクリックしてインポートを完了させます。受注、受注明細のテーブルは、新規に作成しますのでインポートする必要はありません。

図2-2-3 Northwind.mdbから社員、商品、商品区分、得意先テーブルをインポート
3 データベースウィンドウから、テーブル
をクリックしたら、新規作成のボタンをクリックします。テーブルの新規作成ダイアログが表示されたら、一覧からデザインビューを選択してOKボタンをクリックします。テーブルのデザインビューが表示されたら、表2-2-1に示すtbl新受注テーブルを入力します。下線が引いてあるフィールド名は、主キーを意味しますので、該当するフィールドに主キーを設定します。全てのフィールドを入力したらテーブルをtbl新受注の名称で保存して閉じます。同様の手順で、tbl新受注明細を作成します。tbl新受注明細の商品区分名、商品名のフィールドは、正規化に違反していますがこれらのフィールドは、コンボボックスをネストさせるために使用します。
表2-2-1 tbl新受注テーブル
|
テーブル名 |
説 明 |
作成日 |
最終更新日 |
||
|
tbl新受注 |
受注テーブル |
|
|
||
|
No |
フィールド名 |
データ型 |
サイズ |
説 明 |
|
|
1 |
受注コード |
オートナンバー型 |
4 |
|
|
|
2 |
得意先コード |
数値型 |
4 |
長整数型 |
|
|
3 |
社員コード |
数値型 |
4 |
長整数型 |
|
|
4 |
受注日 |
日付/時間型 |
8 |
|
|
|
5 |
締切日 |
日付/時間型 |
8 |
|
|
|
6 |
出荷日 |
日付/時間型 |
8 |
|
|
表2-2-2 tbl新受注明細テーブル
|
テーブル名 |
説 明 |
作成日 |
最終更新日 |
||
|
tbl新受注明細 |
受注明細テーブル |
|
|
||
|
No |
フィールド名 |
データ型 |
サイズ |
説 明 |
|
|
1 |
受注コード |
数値型 |
4 |
受注テーブルの受注コードと連結しています |
|
|
2 |
行番号 |
オートナンバー型 |
4 |
受注明細の行番号 |
|
|
3 |
商品区分コード |
数値型 |
4 |
商品区分テーブルと連結 |
|
|
4 |
商品区分名 |
テキスト型 |
50 |
商品区分名(このフィールドは正規化に違反しています) |
|
|
5 |
商品コード |
数値型 |
4 |
商品テーブルの商品コードと連結しています。 |
|
|
6 |
商品名 |
テキスト型 |
50 |
商品名(このフィールドは正規化に違反しています) |
|
|
7 |
単価 |
通貨型 |
8 |
|
|
|
8 |
数量 |
数値型 |
2 |
|
|
|
9 |
割引 |
数値型 |
4 |
|
|
4 Access を終了させます。
● データシート上のコンボボックスをネストさせるには(方法1)
1 Access を起動したら、作業フォルダに作成した CH2-2.mdbを開きます。
2 データベースウィンドウからクエリ
をクリックしたら、新規作成のボタンをクリックします。クエリの新規作成ダイアログが表示されたら、一覧からデザインビューを選択してOKボタンをクリックします。テーブルの表示ダイアログからテーブルのタブをクリックしてtbl新受注を選択して追加ボタンをクリックします。閉じるのボタンをクリックしてダイアログを閉じます。テーブルのフィールド一覧から*、受注コードをダブルクリックしてQBEフィールドに移動します。(*は、全てのフィールドを選択することを意味します。)受注コードの並べ替えのコンボボックスをクリックして昇順を選択します。更に、表示のチェックボックスのチェックを外して非表示にします。メニューからビューのアイコン
をクリックしてクエリの結果を確認します。クエリをqry受注の名称で保存して閉じます。同様の手順で、tbl新受注明細のクエリqry受注明細を作成します。尚、qry受注明細の金額のフィールドには、CCur([単価]*[数量])の計算式を埋め込みます。

図2-2-4 tbl新受注のクエリを作成して保存する

図2-2-5 tbl新受注明細のクエリを作成して保存する
3 データベースウィンドウからフォーム
をクリックしたら、新規作成のボタンをクリックします。フォームの新規作成ダイアログが表示されたら、一覧からデザインビューを選択します。基になるテーブル/クエリのコンボボックスからqry受注を選択したらOKボタンをクリックします。フォームのデザインビューが表示されたら、図2-2-6のようなフォームを作成します。コントロールのプロパティを表2-2-3のように設定したら、フォームをfrm受注の名称で保存して閉じます。

図2-2-6 受注フォームを作成したらfrm受注の名称で保存する
表2-2-3 frm受注に作成したコントロールのプロパティ
|
コントロールの種類 |
プロパティ |
値 |
|
テキストボックス1 |
名前 |
受注コード |
|
コントロールソース |
受注コード |
|
|
編集ロック |
はい |
|
|
背景色 |
16777088 |
|
|
コンボボックス1 |
名前 |
cbo得意先 |
|
コントロールソース |
得意先コード |
|
|
値集合タイプ |
テーブル/クエリ |
|
|
値集合ソース |
SELECT 得意先.得意先コード, 得意先.得意先名 FROM 得意先 ORDER BY 得意先.得意先コード; |
|
|
連結列 |
1 |
|
|
列数 |
2 |
|
|
列幅 |
0cm; 2.6cm |
|
|
コンボボックス2 |
名前 |
cbo社員 |
|
コントロールソース |
社員コード |
|
|
値集合タイプ |
テーブル/クエリ |
|
|
値集合ソース |
SELECT 社員.社員コード, 社員.氏名 FROM 社員 ORDER BY 社員.社員コード; |
|
|
連結列 |
1 |
|
|
列数 |
2 |
|
|
列幅 |
0cm;2.5cm |
|
|
テキストボックス2 |
名前 |
受注日 |
|
コントロールソース |
受注日 |
|
|
既定値 |
Date() |
|
|
テキストボックス3 |
名前 |
締切日 |
|
コントロールソース |
締切日 |
|
|
既定値 |
Date()+7 |
|
|
コマンドボタン1 |
名前 |
cmdAdd |
|
コマンドボタン2 |
名前 |
cmdUnDo |
|
コマンドボタン3 |
名前 |
cmdSave |
|
コマンドボタン4 |
名前 |
cmdClose |
4 データベースウィンドウのフォームから新規作成のボタンをクリックします。フォームの新規作成ダイアログが表示されたら、一覧からデザインビューを選択します。基になるテーブル/クエリのコンボボックスから、qry受注明細を選択したらOKボタンをクリックします。フォームのデザインビューが表示されたら、フォームのプロパティを表示させて既定のビューを帳票フォームに設定します。メニューからフィールドリストのアイコン
をクリックしてqry受注明細のフィールドリストを表示させます。フィールドリストから、商品区分名をドラッグして詳細部の左側に配置します。テキストボックスのラベルを選択したら、切り取ってフォームヘッダーに配置します。ラベルの標題を、商品区分名に書き替えます。ツールボックスからコンボボックスのアイコン
をクリックしたら、テキストボックス商品区分名の左側に商品区分コードのコンボボックスを作成します。コンボボックスのサイズは、丁度ドロップダウンリストのボタン(▼)が表示されるくらいの四角形にします。コンボボックスをクリックしたときのリスト幅は、ちょうどコンボボックスと商品区分名の幅を加算したサイズに設定します。つまり、コンボボックスとテキストボックスを組み合わせて擬似コンボボックスを作成したようにします。同様の手順で、フィールドリストから商品名をドラッグして商品区分名の右側に配置します。テキストボックス商品名の左側には、商品コードのコンボボックスを配置します。フィールドリストから、単価、数量、金額をドラッグして商品名の右側に順番に配置します。最後に、ツールボックスからテキストボックスのアイコン
をクリックして、フォームフッターに数量と金額の合計を表示するテキストボックスを作成します。テキストボックス数量のコントロールソースには、=Sum([数量])を埋め込みます。テキストボックス金額のコントロールソースには、=Sum([金額])を埋め込みます。表示メニューからタブオーダーを選択して、詳細部に配置したコントロールのタブオーダーを図2-2-8のように設定します。受注明細フォームに作成したコントールのプロパティを、表2-2-4のように設定します。

図2-2-7 受注明細のサブフォームを作成してsfr受注明細の名称で保存する

図2-2-8 sfr受注明細のタブオーダーを設定する
表2-2-4 sfr受注明細に作成したコントロールのプロパティ
|
コントロールの種類 |
プロパティ |
値 |
|
コンボボックス1 |
名前 |
cbo商品区分 |
|
コントロールソース |
商品区分コード |
|
|
値集合タイプ |
テーブル/クエリ |
|
|
値集合ソース |
SELECT 商品区分.区分コード, 商品区分.区分名 FROM 商品区分 ORDER BY 商品区分.区分コード; |
|
|
連結列 |
1 |
|
|
列数 |
2 |
|
|
列幅 |
0cm;3.5cm |
|
|
リスト幅 |
3.5cm |
|
|
テキストボックス1 |
名前 |
商品区分名 |
|
コントロールソース |
商品区分名 |
|
|
コンボボックス2 |
名前 |
cbo商品 |
|
コントロールソース |
商品コード |
|
|
値集合タイプ |
テーブル/クエリ |
|
|
値集合ソース(※1) |
SELECT 商品.商品コード, 商品.商品名, 商品.単価 FROM 商品 WHERE (((商品.区分コード)=[Forms]![frm受注]![sfr受注明細].[form]![cbo商品区分])) ORDER BY 商品.商品コード; |
|
|
連結列 |
1 |
|
|
列数 |
3 |
|
|
列幅 |
0cm;4.3cm;0cm |
|
|
リスト幅 |
4.3cm |
|
|
テキストボックス2 |
名前 |
商品名 |
|
コントロールソース |
商品名 |
|
|
テキストボックス3 |
名前 |
単価 |
|
コントロールソース |
単価 |
|
|
テキストボックス4 |
名前 |
数量 |
|
コントロールソース |
数量 |
|
|
テキストボックス5 |
名前 |
金額 |
|
コントロールソース |
金額 |
|
|
テキストボックス6 |
名前 |
txt数量合計 |
|
コントロールソース |
=Sum([数量]) |
|
|
編集ロック |
はい |
|
|
背景色 |
16777088 |
|
|
テキストボックス7 |
名前 |
txt金額合計 |
|
コントロールソース |
=Sum([金額]) |
|
|
編集ロック |
はい |
|
|
背景色 |
16777088 |
|
|
フォーム |
既定のビュー |
帳票フォーム |
※ 1 コンボボックスの値集合ソースのWHERE句には、フィルタ条件として商品区分コードのコンボボックスの値を指定します。このフィルタ条件を設定することにより、商品コードのコンボボックスには、商品区分コードで選択したアイテムのみ表示されます。
(((商品.区分コード)=[Forms]![frm受注]![sfr受注明細].[form]![cbo商品区分]))
5 メニューからコードのアイコン
をクリックして、サブフォームのフォームモジュールを表示します。CH2-2.mdbを開いたら、sfr受注明細のフォームモジュールをコピーして貼り付けます。フォームモジュールのソースコードは、リスト2-2-2を参照してください。サブフォームをsfr受注明細の名称で保存して閉じます。
6 frm受注をデザインモードで開いたら、データベースウィンドウからsfr受注明細のアイコンをドラッグして詳細部に配置します。サブフォームのプロパティを表示させたら、リンク子フィールド/リンク親フィールドに受注コードを設定します。メニューからコードのアイコン
をクリックして、フォームモジュールを表示させます。CH2-2.mdbを開いたら、frm受注のフォームモジュールをコピーして貼り付けます。フォームモジュールのソースコードは、リスト2-2-1を参照してください。
7 frm受注をビューモードで開いたら、受注明細行の商品区分コードのコンボボックスをクリックして一覧から飲料を選択します。次に、商品コードのコンボボックスをクリックします。商品コードの一覧には、飲料のアイテムのみ表示されることを確認します。商品コードのコンボボックスからアイテムを選択すると、そのアイテムの単価と金額が表示されます。数量を変更すると、金額が再計算されて表示されます。このサンプルデータベースでは、コントロールがフォーカスを取得するとアプリ独自のカーソルとして淡黄色の背景色を表示します。アプリ独自のカーソルを表示する方法については、後述するTipを参照してください。
8 コンボボックスがネストすることを確認したら、frm受注を保存してAccessを終了させます。
Sub cmdAdd_Click()イベントの処理
このイベントは、メインフォームの追加ボタンをクリックしたときに実行されます。このイベントでは、DoCmdのGoToRecordメソッドに引数acNewRecを指定して新規レコードを追加します。
Sub cmdSave_Click()イベントの処理
このイベントは、メインフォームの保存ボタンをクリックしたときに実行されます。このイベントでは、DoCmdのDoMenuItemメソッドでレコードメニューからレコードの保存を選択して、カレントレコードを保存します。更に、DoCmdのGoToRecordメソッドで新規レコードを追加します。
Sub cmdUnDo_Click()イベントの処理
このイベントは、メインフォームの元に戻すボタンをクリックしたときに実行されます。このイベントでは、DoCmdのDoMenuItemメソッドで編集メニューから「元に戻す」を選択して、カレントレコードを変更前の状態に戻します。
Sub cmdClose_Click()イベントの処理
このイベントは、メインフォームのフォームを閉じるボタンをクリックしたときに実行されます。このイベントでは、DoCmdのCloseメソッドで現在表示されているフォームを閉じます。
リスト2-2-1 frm受注のフォームモジュール
|
Option Compare Database Option Explicit Private Sub cmdClose_Click() DoCmd.Close End Sub Private Sub cmdSave_Click() DoCmd.DoMenuItem acFormBar, acRecordsMenu, _ acSaveRecord, , acMenuVer70 DoCmd.GoToRecord , , acNewRec Me.cbo得意先.SetFocus End Sub Private Sub cmdUnDo_Click() DoCmd.DoMenuItem acFormBar, acEditMenu, _ acUndo, , acMenuVer70 End Sub Private Sub cmdAdd_Click() DoCmd.GoToRecord , , acNewRec Me.cbo得意先.SetFocus End Sub |
Sub cbo商品_GotFocus()イベントの処理
このイベントは、サブフォームの商品コードのコンボボックスがフォーカスを取得したときに実行されます。このイベントでは、商品区分コードのコンボボックスで選択したアイテムのみ表示させるために、商品コードのコンボボックスを再クエリしてからアイテムの一覧を表示します。
cbo商品_AfterUpdate()イベントの処理
このイベントは、サブフォームの商品コードのコンボボックスからアイテムを選択したときに実行されます。このイベントでは、商品コードのコンボボックスの列から商品名、単価を取得してテキストボックスに設定します。
リスト2-2-2 sfr受注明細のフォームモジュール
|
Option Compare Database Option Explicit Private Sub cbo商品_AfterUpdate() With Me .商品名 = .cbo商品.Column(1) .単価 = .cbo商品.Column(2) .商品名.SetFocus End With End Sub Private Sub cbo商品_GotFocus() With Me.cbo商品 .Requery .Dropdown End With End Sub |
Tip
|
アプリ独自のカーソルを表示するには フォームに配置したテキストボックス/コンボボックスがフォーカスを取得したとき、アプリ独自のカーソルを表示させるには、条件付き書式を設定します。シフトキーを押しながら、フォームに配置した全てのテキストボックス、コンボボックスをクリックして選択します。書式メニューから条件付き書式設定をクリックして条件付き書式設定のダイアログを表示させます。条件1のコンボボックスから条件として、フォーカスのあるフィールドを選択します。次に、背景色のアイコンの右隣りのボタン(▼)をクリックして、カラーパレットを表示させたらお好みの背景色をクリックします。サンプルデータベースでは、カーソルの背景色に淡黄色を使用しています。
図2-2-9 条件付き書式設定のダイアログからフォーカスのあるフィールドを選択してフィールドの背景色を設定する
図2-2-10 パレットから背景色のカラーを選択 |
● データシート上のコンボボックスをネストさせるには(方法2)
1 Accessを起動したら、作業フォルダに作成した CH2-2.mdbを開きます。
2 データベースウィンドウからフォーム
をクリックしたらfrm受注をクリックして選択します。マウスの右ボタンをクリックしてショートカットメニューを表示させたら、名前を付けて保存をクリックします。名前を付けて保存のダイアログが表示されたら、フォームの保存先にfrm受注2を入力してOKボタンをクリックします。
3 frm受注2をデザインモードで開きます。サブフォームをクリックして選択したら、Deleteキーを押して削除します。このフォームは、これから作成するサブフォームsfr受注明細2のメインフォームとして使用します。frm受注2を保存して閉じます。
4 データベースウィンドウのフォームから新規作成ボタンをクリックします。フォームの新規作成ダイアログが表示されたら、一覧からデザインビューを選択します。基になるテーブル/クエリのコンボボックスから、qry受注明細を選択したらOKボタンをクリックします。フォームのデザインビューが表示されたら、フォームのプロパティを表示させて既定のビューを帳票フォームに設定します。ツールボックスからコンボボックスのアイコン
をクリックしたら、商品区分コードのコンボボックスを詳細部の左端に作成します。コンボボックスの列には、商品区分テーブルの区分コードと区分名を指定します。連結フィールドには、区分コードを指定して非表示にします。
同様の手順で、ツールボックスからコンボボックスのアイコン
をクリックして、商品区分コードのコンボボックスの右側に商品コードのコンボボックスを作成します。コンボボックスの列には、商品テーブルの商品コード、商品名、単価を指定します。区分コードの抽出条件に、[Forms]![frm受注2]![sfr受注明細2].[form]![cbo商品区分]を入力して、商品区分コードで選択したアイテムのみ表示されるようにします。
メニューからフィールドリストのアイコン
をクリックしてqry受注明細のフィールドリストを表示させます。フィールドリストから、商品区分名をドラッグして商品区分コードのコンボボックスの下に配置します。商品区分名のテキストボックスを、商品区分コードのコンボボックスと同じ幅になるようにサイズ調整します。同様の手順で、フィールドリストから商品名のフィールドをドラッグして商品コードのコンボボックスの下に配置します。テキストボックスの幅を、コンボボックスと同じ幅になるようにサイズ調整します。(複数のコントロールの幅を同じにするには、対象となるコントロールを全て選択して書式メニューからサイズ変更、広いコントロールをクリックすると便利です。)
フィールドリストから、単価、数量、金額をドラッグして商品コードの右側に、順番に配置します。最後に、ツールボックスからテキストボックスのアイコン
をクリックして、フォームフッターに数量と金額の合計を表示するコントロールを作成します。テキストボックスのコントロールソースには、=Sum([数量])、=Sum([金額])を埋め込みます。
受注明細のサブフォームを作成したら、商品区分名と商品名のテキストボックスをコンボボックスの上に重ねてコンボボックスを隠します。また、商品区分名と商品名のプロパティを表示させたら、テキストボックスが自動的にフォーカスを取得しないようにタブストップを“いいえ”に設定します。それから、サブフォームのタブオーダーを図2-2-12のように設定します。

図2-2-11 受注明細のサブフォームを作成したら、商品区分名、商品名のテキストボックスをコンボボックスに重ねる

図2-2-12 sfr受注明細2のタブオーダーを設定する
表2-2-5 sfr受注明細2に作成したコントロールのプロパティ
|
コントロールの種類 |
プロパティ |
値 |
|
コンボボックス1 |
名前 |
cbo商品区分 |
|
コントロールソース |
商品区分コード |
|
|
値集合タイプ |
テーブル/クエリ |
|
|
値集合ソース |
SELECT 商品区分.区分コード, 商品区分.区分名 FROM 商品区分 ORDER BY 商品区分.区分コード; |
|
|
連結列 |
1 |
|
|
列数 |
2 |
|
|
列幅 |
0cm;3.5cm |
|
|
コンボボックス2 |
名前 |
cbo商品 |
|
コントロールソース |
商品コード |
|
|
値集合タイプ |
テーブル/クエリ |
|
|
値集合ソース |
SELECT 商品.商品コード, 商品.商品名, 商品.単価 FROM 商品 WHERE (((商品.区分コード)=[Forms]![frm受注2]![sfr受注明細2].[form]![cbo商品区分])) ORDER BY 商品.商品コード; |
|
|
連結列 |
1 |
|
|
列数 |
3 |
|
|
列幅 |
0cm;4.3cm;0cm |
|
|
テキストボックス1 |
名前 |
商品区分名 |
|
コントロールソース |
商品区分名 |
|
|
タブストップ |
いいえ |
|
|
テキストボックス2 |
名前 |
商品名 |
|
コントロールソース |
商品名 |
|
|
タブストップ |
いいえ |
|
|
テキストボックス3 |
名前 |
単価 |
|
コントロールソース |
単価 |
|
|
テキストボックス4 |
名前 |
数量 |
|
コントロールソース |
数量 |
|
|
テキストボックス5 |
名前 |
金額 |
|
コントロールソース |
金額 |
|
|
テキストボックス6 |
名前 |
txt数量合計 |
|
コントロールソース |
=Sum([数量]) |
|
|
編集ロック |
はい |
|
|
背景色 |
16777088 |
|
|
テキストボックス7 |
名前 |
txt金額合計 |
|
コントロールソース |
=Sum([金額]) |
|
|
編集ロック |
はい |
|
|
背景色 |
16777088 |
|
|
フォーム |
既定のビュー |
帳票フォーム |
5 メニューからコードのアイコン
をクリックして、サブフォームのフォームモジュールを表示します。CH2-2.mdbを開いたら、sfr受注明細2のフォームモジュールをコピーして貼り付けます。フォームモジュールのソースコードは、リスト2-2-3を参照してください。サブフォームをsfr受注明細2の名称で保存して閉じます。
6 frm受注2をデザインモードで開いたら、データベースウィンドウからsfr受注明細2のアイコンをドラッグして詳細部に配置します。サブフォームのプロパティを表示させたら、リンク子フィールド/リンク親フィールドに受注コードを入力してメイン/サブフォームのリレーションを設定します。
7 frm受注2をビューモードで開きます。サブフォームの受注明細には、商品区分コードのコンボボックスのみ表示されています。マウスを商品名のテキストボックスに移動して左ボタンをクリックすると、商品区分コードのコンボボックスが隠されて、商品コードのコンボボックスが表示されます。商品区分コードのコンボボックスから飲料を選択したら、商品コードのコンボボックスを表示させて、飲料のアイテムのみ表示されるか確認します。
8 コンボボックスがネストされることを確認したら、frm受注2を保存してAccess を終了させます。
Sub 商品区分名_Click()/Sub 商品区分名_DblClick()のイベント処理
これらのイベントは、商品区分名のテキストボックスをクリック/ダブルクリックしたときに実行されます。これらのイベントでは、商品区分コードのコンボボックスにフォーカスを移動して、テキストボックスをコンボボックスに切り替えます。尚、これらのイベントは、条件付コンパイル定数、#Const conClick、#Const conDblClickにTrue/Falseを設定することにより有効/無効にすることができます。
Sub 商品名_Click()/Sub 商品名_DblClick()のイベント処理
これらのイベントは、商品名のテキストボックスをクリック/ダブルクリックしたときに実行されます。これらのイベントでは、商品コードのコンボボックスにフォーカスを移動して、テキストボックスをコンボボックスに切り替えます。尚、これらのイベントは、条件付コンパイル定数、#Const conClick、#Const conDblClickにTrue/Falseを設定することにより有効/無効にすることができます。
Sub cbo商品区分_AfterUpdate()のイベント処理
このイベントは、商品区分コードのコンボボックスから商品区分を選択したときに実行されます。このイベントでは、商品区分コードのコンボボックスから商品区分名を取り出して商品区分名のテキストボックスに格納します。
Sub cbo商品_GotFocus()のイベント処理
このイベントは、商品コードのコンボボックスがフォーカスを取得したときに実行されます。このイベントでは、商品区分コードで選択したアイテムのみ表示されるように、商品コードのコンボボックスを再クエリします。尚、商品区分コードのフィルタ条件は、(((商品.区分コード)=[Forms]![frm受注2]![sfr受注明細2].[form]![cbo商品区分]))のように設定されています。
Sub cbo商品_AfterUpdate()のイベント処理
このイベントは、商品コードのコンボボックスからアイテムを選択したときに実行されます。このイベントでは、商品コードのコンボボックスから商品名、単価を取り出して、商品名と単価のテキストボックスに格納します。尚、金額のフィールドには、CCur([単価]*[数量])の計算式が埋め込まれていますので自動計算されます。
リスト2-2-3 sfr受注明細2のフォームモジュール
|
Option Compare Database Option Explicit #Const conClick = True #Const conDblClick = False Private Sub cbo商品_AfterUpdate() With Me .商品名 = .cbo商品.Column(1) .単価 = .cbo商品.Column(2) End With End Sub Private Sub cbo商品_GotFocus() With Me .Painting = False .cbo商品.Requery .Painting = True End With End Sub Private Sub cbo商品区分_AfterUpdate() Me.商品区分名 = Me.cbo商品区分.Column(1) End Sub #If conClick Then Private Sub 商品区分名_Click() Me.cbo商品区分.SetFocus End Sub Private Sub 商品名_Click() Me.cbo商品.SetFocus End Sub #End If #If conDblClick Then Private Sub 商品区分名_DblClick(Cancel As Integer) Me.cbo商品区分.SetFocus End Sub Private Sub 商品名_DblClick(Cancel As Integer) Me.cbo商品.SetFocus End Sub #End If |