リストボックス/コンボボックスの書式設定
オリジナルのリストを設定する
リストボックスのデータは通常、テーブルなどにリンクしたデータを表示しますが、オリジナル のデータを表示することも可能です。
Private Sub Form_Load() 'フォームを読み込んだ時に List1 に以下のデータを表示する With Me.List1 .Width = 1600 '幅 .Height = 900 '高さ .RowSourceType = "Value List" 'Type ; 区切り .RowSource = "1:新規登録;2:削除;3:変更;4:参照" End With End Subコンボボックスの場合
Private Sub Form_Load() 'フォームを読み込んだ時に Combo1 に以下のデータを表示する With Me.Combo1 .Width = 1600 '幅 .Height = 260 '高さ .RowSourceType = "Value List" 'Type ; 区切り .RowSource = "1:新規登録;2:削除;3:変更;4:参照" End With End Sub
テーブルデータを表示する
「RowSourceType」プロパティにテーブル等のデータをセットするには以下のようにします。コンボボックスも同様です。
Private Sub Form_Load() Me.Caption = "検索メニュー" With Me.List1 .Width = 1600 '幅 .Height = 900 '高さ .RowSourceType = "Field List" 'Type ; フィールドリスト .RowSource = "tbl_顧客リスト" End With With Me.txt1 .Width = 1600 '幅 .Height = 300 '高さ End With End Sub
Private Sub Form_Load() With Me.List1 .Width = 2000 '幅 .Height = 900 '高さ .RowSourceType = "Table/Query" 'Type ; テーブル .RowSource = "tbl_顧客リスト" .ColumnCount = 3 'リストボックスの列数 .ColumnWidths = "1.5cm ; 1.5cm ; 2.0cm " '列幅 End With 'tbl_顧客リストの2列目(氏名)を取得し、Shimeiフィールドに格納する With Me.List1 .BoundColumn = 2 '2列目を取得 .ColumnHeads = True 'フィールド名(列見出し)を表示 .ControlSource = "Shimei" 'Shimeiフィールドに表示 End With End Sub
コンボボックスのリスト幅と行数の設定
コンボボックスのリスト幅と行数を設定する場合は、以下の通りです。
Private Sub Form_Load() With Me.Combo1 .RowSourceType = "Table/Query" 'Type ; テーブル .RowSource = "tbl_顧客リスト" .Width = 3000 'リストボックスの横幅 .ListWidth = 3500 'リストボックスの列幅 .ListRows = 8 'リストボックスの行数 End With End Sub
2つのコンボボックスをリンクする
1つ目のコンボボックスで選択されたデータに関連したデータのみを2つ目のコンボボックスに表示します。
以下のようなデータのテーブルがあるとします。
社員コード 所属 役職 氏名 1011 総務部 部長 木下 雄二 1012 総務部 課長 小日向 直美 1014 総務部 主任 大倉 真由美 1101 第一営業部 部長 斉藤 美喜夫 1105 第一営業部 課長 佐藤 賢治 1110 第一営業部 主任 山田 明日香 1220 第二営業部 課長代理 横山 善男 1230 第二営業部 係長 今井 正明 1つ目のコンボボックスの値を所属フィールドにし、2つ目のコンボボックスの値を氏名にしますが、ここで抽出条件に1つ目のコンボボックスのデータを指定します。
1つ目のコンボボックスの「AfterUpdate」イベントに「ReQuery」コマンドを割り当てます。
Private Sub Form_Load() 'フォームを読み込み時、コンボ0 に tbl_社員 の2列目のデータを表示する 'コンボ1 に tbl_社員 の4列目のデータを表示する With Me.コンボ0 .RowSourceType = "Table/Query" .RowSource = "tbl_社員" .ColumnCount = 2 End With With Me.コンボ1 .RowSourceType = "Table/Query" .RowSource = "SELECT [tbl_社員].[氏名], [tbl_社員].[所属] _ FROM tbl_社員 WHERE ((([tbl_社員].[所属])=[Forms]![frm1]![コンボ0])); " .ColumnCount = 4 End With End Sub Private Sub コンボ0_AfterUpdate() '更新後処理 コンボ1のデータ DoCmd.Requery "コンボ1" End Sub
フォーカスを取得したらリストを自動表示する
コントロールがフォーカスを取得したらリストを自動表示します。
Private Sub Combo1_Enter() 'コントロールがフォーカスを取得したらリストを自動表示する Me!Combo1.Dropdown End Sub
新規データを入力できるコンボボックス
コンボボックスはレコードソースで指定したデータだけを入力できるので、テキストボックスへの入力時にミスが発生することはありません。
そして、新規のデータを入力できればもっと便利です。
先ず、フォームの任意のテキストボックスをコンボボックスに変更します。そのコンボボックスのレコードソースを変更前のテキストボックスのデータにします。フォームの読み込み時にコンボボックスの所属と役職の自動拡張とリスト外データの入力を許可を設定します。
例)
社員コード 所属 役職 氏名 1011 総務部 部長 木下 雄二 1012 総務部 課長 小日向 直美 1014 総務部 主任 大倉 真由美 1101 第一営業部 部長 斉藤 美喜夫 1105 第一営業部 課長 佐藤 賢治 1110 第一営業部 主任 山田 明日香 1220 第二営業部 課長代理 横山 善男 1230 第二営業部 係長 今井 正明 所属[コンボボックス] のレコードソース SELECT 社員.所属 FROM 社員 GROUP BY 社員.所属;
役職[コンボボックス] のレコードソース
SELECT 社員.役職 FROM 社員 GROUP BY 社員.役職;
Private Sub Form_Load() 'コンボボックス、所属と役職の自動拡張とリスト外データの入力を許可する With Me.Combo所属 .AutoExpand = True '自動拡張を許可する .LimitToList = False 'リスト外データの入力を許可する End With With Me.Combo役職 .AutoExpand = True '自動拡張を許可する .LimitToList = False 'リスト外データの入力を許可する End With End Sub