■VBAで実装する方法
Private Sub Form_Load() '----------------------------------------------- 'フォーム読み込時にコンボボックスのソースを設定 '----------------------------------------------- With Me.cmb_Test 'ソースのタイプを設定 .RowSourceType = "Table/Query" 'ソースを設定 .RowSource = "T部署マスタ" '列数設定 .ColumnCount = 2 '各列の幅を設定 .ColumnWidths = "1cm;2cm" '連結列の設定 .BoundColumn = 1 'リストボックスの幅を設定 '1cm=567twipなので設定したいcmの数に567を掛ける .ListWidth = 3 * 567 End With End Sub
※コンボボックスのソースがテーブルやクエリで、ソースとなるテーブルの別カラムを反映させる場合は以下のコードで表示させる方法が一番簡単
Private Sub cmb_Test_AfterUpdate() '---------------------------------------------------------------- 'コンボボックスの値に紐づいてテキストボックスに表示させる値を設定 '---------------------------------------------------------------- Me.txb_DepartmentName = Me.cmb_Test.Column(1) End Sub
※コンボボックスのコントロールソースがテーブルやクエリ以外、またはソースとなるテーブルやクエリ以外の値を関連付けて表示させる場合はDlookup関数を使用
Private Sub cmb_Test_AfterUpdate() '---------------------------------------------------------------- 'コンボボックスの値に紐づいてテキストボックスに表示させる値を設定 '---------------------------------------------------------------- Me.txb_DepartmentName = DLookup("部署名", "T部署マスタ", "部署コード=" & "cmb_Test") End Sub
Private Sub btn_Clear_Click() '---------------------------------------------------------- 'クリアボタンでテキストボックスとコンボボックスの値をクリア '---------------------------------------------------------- Dim c As Object For Each c In Me.Controls If c.ControlType = acTextBox Or c.ControlType = acComboBox Then c = Null End If Next End Sub
■以下の様に参照先が同じコンボボックスが複数ある場合で
DlookUp関数使用する場合の部品化
※何度も言うが、コンボボックスと同じテーブル・クエリの別カラムを反映させる場合は「コンボボックス名.Column(カラム番号)」で転記するのが一番簡単。
コントロールソース以外の値を引っ張ってくる際にDlookupを使用する
呼び出し元のイベントプロシージャ
Private Sub cmb_Test2_AfterUpdate() Me.txb_DepartmentName2 = fncGetDepartment("cmb_Test2") End Sub Private Sub cmb_Test3_AfterUpdate() Me.txb_DepartmentName3 = fncGetDepartment("cmb_Test3") End Sub Private Sub cmb_Test4_AfterUpdate() Me.txb_DepartmentName4 = fncGetDepartment("cmb_Test4") End Sub
部品化したコード
Function fncGetDepartment(cmbName As String) As String '---------------------------------------------------------- 'コンボボックスの値を元にテキストボックスの値を反映させる '引数1:対象コンボボックスの名前 '戻り値:テキストボックスに表示させる値 '---------------------------------------------------------- 'Null値チェック If IsNull(Forms("テスト用").Controls(cmbName)) Then fncGetDepartment = "" Exit Function End If 'コンボボックスで選択された値を取得 Dim strCode As String strCode = Forms("テスト用").Controls(cmbName) '取得した値を条件式に部署名を抽出 fncGetDepartment = DLookup("部署名", "T部署マスタ", "部署コード=" & Chr(34) & strCode & Chr(34)) End Function