コンボボックスを利用する上で必要な操作方法と用語の説明をします。

入門編
   
コンボボックスの作り方
   
値集合タイプの種類と値集合ソースの設定方法
  
  連結する値とは
  
  表示の方法

応用編
  
  
  入力された値がリストにないときは入力させない
  
  入力された値と一致する候補を自動で表示する

  
  
  入力された値がリストにないときは、リストに追加する
  
  自動的にリストに開く

入門編 コンボボックスの作り方

(1) ツールボックスにあるコンボボックスのボタンをクリックします。
  すると、マウスポインタがコンボボックスのマークに変化します。
  そのまま、フォームにドラックドロップします。


(2) その結果、下のようにコンボボックスが自動作成されます。


入門編 値集合タイプの種類と値集合ソースの設定方法

(1) 値集合タイプは3種類から選ぶことができます。今回は1と2の説明をします。
  
 1.テーブルとクエリ
  
 2.値リスト
   3.フィールドリスト
  


(2) テーブルとクエリの設定方法   
   この場合、値集合ソースにはテーブル名やクエリ名を記述します。
   また、SQL文を記述する方法もあります。
   

(3) 値リストの設定方法
   テーブルやクエリを使うまでもない、値が少ない場合に利用します。
   例えば、リストが3つしかない場合など。
   表示したい値を入力したら 
 で区切って、また次の値を入力していきます。


入門編 連結する値とは

(1) コンボボックスで選択された値を保存するデータのことをいいます。
   コンボボックスは複数の値を表示することができます。
   そのため、何列目を保存するのかを予め決めておきます。
   既定値は1になっていますので、左側から数えて1列目のデータが保存される
   ようになっています。


入門編 表示の方法

(1) テーブルとクエリの設定方法
   書式タブをクリックします。設定するプロパティは3つです。
    
(1)列数 表示させる列の数を指定します。
          今回はテーブルのフィールド数が3つなので、3を設定します。
    
(2)列幅 表示させる列のそれぞれの幅を指定します。
          左側が1列目になります。;で区切って順に入力します。
    
(3)リスト幅 リスト全体の表示幅を指定します。
            列幅の合計を設定します。


   もしも、IDのようにデータを保存する必要はあるが、入力者にとっては
   直接関係のないような値を表示させたくない場合は、列幅を0にすることで
   この問題を解決できます。


(2) 値リストの設定方法
   (1)の設定で表示させると、下図のような表示になってしまいます。


   値リストで(1)と同じ内容を表示させるには次のように設定します。
   
1;1行目;100;2;2行目;200;3;3行目;300
   設定内容の意味は下記のとおりになります。
データ 1;1行目;100; 2;2行目;200; 3;3行目;300
1行目 2行目 3行目
1 2 3 1 2 3 1 2 3
1 1行目 100 2 2行目 200 3 3行目 300



入力された値がリストにないときは入力させない

(1) リストと一致する値だけを入力させる場合、「入力チェック」プロパティを
   「はい」に設定します。


(2) もしリストにない値を入力すると、下図のようにエラーが出ます。


入力された値と一致する候補を自動で表示する

(1) 入力された値と一致する候補を自動で表示します。
   「自動拡張」プロパティを「はい」に設定します。


(2) 「た」と入力し、エンターを押すと、自動でリストと一致する値の「たとえば」が
   表示されます。


入力された値がリストにないときは、リストに追加する

(1) テーブルとクエリの設定方法
   コンボボックスには「リスト外入力時」イベントが用意されています。


   下図のようなコードが自動で作成されます。


   「
NewData」はコンボボックスに入力された値です。
   「
Response」には3つの組込み定数を代入します。
                
acDataErrDisplay 既定のメッセージが表示される。
値は追加されない。
acDataErrContinue 既定のメッセージは表示されない。
値は追加されない。
acDataErrAdded 既定のメッセージは表示されない。
値は追加される。
コンボ ボックスの再クエリーが実行されてリストが更新される。


   次の例では、値集合タイプがテーブルのコンボボックスに値を追加します。
   テーブル名は「T_テーブル」です。
   フィールド名は「フィールド1」。データ型はテキスト型です。

Private Sub コンボ1_NotInList(NewData As String, Response As Integer)

'変数を宣言する。

Dim MySql As String

' 確認する。
If MsgBox("リストにない値を追加しますか?", vbOKCancel) = vbOK Then

 ' データが追加中であることを示すため、引数 Response を設定する。
 Response = acDataErrAdded

 ' アクションクエリー実行時確認メッセージを表示しない。
 DoCmd.SetWarnings False

 ' 引数 NewData の文字列をテーブルに追加する。
 MySql = "INSERT INTO T_テーブル ( フィールド1 ) SELECT """ & NewData & """"
 DoCmd.RunSQL MySql

 ' 確認メッセージを戻す。
 DoCmd.SetWarnings True

Else
 ' エラー メッセージを表示せず、変更を元に戻す。
 Response = acDataErrContinue
 Me!コンボ1.Undo
End If

End Sub


   値集合ソースが「値リスト」であれば、この部分が

 ' アクションクエリー実行時確認メッセージを表示しない。
 DoCmd.SetWarnings False
 ' 引数 NewData の文字列をテーブルに追加する。
 MySql = "INSERT INTO T_テーブル ( フィールド1 ) SELECT """ & NewData & """"
 DoCmd.RunSQL MySql
 ' 確認メッセージを戻す。
 DoCmd.SetWarnings True

   このようになります。

' 引数 NewData の文字列を値集合ソースに追加する。
 Me!コンボ1.RowSource = Me!コンボ1.RowSource & ";" & NewData


自動的にリストに開く

   (1)フォーカス取得時のイベントプロシージャを作成します。


   (2)下図のように1行記述すれば、クリックしなくても自動でリストが開きます。


back

ご質問、ご感想はこちらにお願いします。

CopyRight(C) 2003- Access Town Office All Rights Reserved