本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

[ACC2] コンボボックスのリストに新しいデータを追加する方法

文書番号: 403934

最終更新日: 1997/11/01


この資料は以下の製品について記述したものです。

この記事は、以前は次の ID で公開されていました: JP403934

概要

フォーム上のコンボ ボックスに、表示されているリストに存在しないデータを入力した場合に、入力したデータをリストに追加する方法を紹介します。

現象

サンプル データベース NWIND.MDB 内に、フォームを新規作成します。フォーム上のコンボ ボックスで、コンボ ボックスに表示されているリスト以外のデータを入力した時に、コンボ ボックスの値の集合ソースにデータを追加するフォームを開きます。そのフォームを閉じて、コンボ ボックスのフォームに戻ると、コンボ ボックスのリストに追加したデータが反映されて表示されるという操作方法です。

■ 操作方法

  1. Access 2.0 を起動し、サンプルデータベース NWIND.MDB を開きます。
  2. フォームを新規作成します。
    データベース ウィンドウで [ファイル] - [新規] - [フォーム] コマンドを選択するか、データベース ウィンドウの <フォーム> ボタンをクリックし、<新規作成>ボタンをクリックします。
    [新規作成] ダイアログ ボックスが表示されます。[無地フォーム] ボタンをクリックします。
  3. フォームのデザインビューで、ツールボタンからコンボ ボックスのツールをクリックし、詳細セクションにコンボ ボックスを追加作成します。コンボ ボックスのプロパティを下記のように設定してください。
    プロパティシートを表示するには、コンボ ボックスを選択して[表示] - [プロパティ] コマンドを選択するか、ツールバーの <プロパティ> ボタンをクリックします。
          プロパティ   設定値
         --------------  -----------------------
          名前      コンボボックス
          値集合タイプ  テーブル/クエリー
          値集合ソース  社員
          列数       3
          列幅       1 cm; 3 cm; 3 cm
          連結列      1
          入力チェック  はい
          幅        8 cm
    
  4. コンボ ボックスのプロパティにイベントプロシージャを設定します。
    [リスト外入力時/OnNotInList] プロパティにフォーカスを移動し、[表示] - [コード] コマンドを選択するか、ツールバーの <コード> ボタンをクリックします。
    あるいは、プロパティの右側の <ビルド> ボタンをクリックします。
    [ビルダの選択] ダイアログ ボックスが表示されますので「コード ビルダ」を選択し[OK] ボタンをクリックします。
    [GRAPHIC: ]
  5. モジュールウィンドウで、下記のコードを入力します。
         ---------------------------------------------------------------------------
         Sub コンボボックス_NotInList (NewData As String, Response As Integer)
             Dim Result
             Dim Msg As String
             Dim CR As String: CR = Chr$(13)
             'ユーザが NewData を消した場合
           If NewData = "" Then Exit Sub
             '新しいデータを追加するかをユーザに尋ねる
           Msg = "'" & NewData & "' はリストの中に存在しません。" & CR & CR
           Msg = Msg & "追加しますか?"
           If MsgBox(Msg, 32 + 4) = 6 Then
             'ユーザが [はい (Y)] を選択したら、追加用の [社員] フォームを開きます。
               DoCmd フォームを開く "社員", , , , A_ADD, A_DIALOG, NewData
           End If
             '新しいデータを追加したかどうかを確認します。
           Result = DLookup("[社員コード]", "社員", "[社員コード]=" & NewData & "")
           If IsNull(Result) Then
             '追加していない時は、もう一度入力を促します。
               Response = DATA_ERRCONTINUE
               MsgBox "再入力してください。"
           Else
             'リストに新しいデータを追加します。
               Response = DATA_ERRADDED
           End If
         End Sub
         ---------------------------------------------------------------------------
    
  6. [実行] - [モジュールのコンパイル] コマンドを選択するか、ツールバーの<コンパイル> ボタンをクリックします。エラーが表示されなければ、モジュールウィンドウを閉じてください。エラーが表示された場合は、入力ミスがないかどうか再度チェックしてください。
  7. フォーム名を [フォーム 1] として保存し、デザインビューを閉じます。
  8. データベース ウィンドウから、[社員] フォームを選択して、[デザイン] ボタンをクリックします。フォームのデザインビューが開きます。
  9. フォームの プロパティにイベントプロシージャを設定します。
    [読み込み時/OnLoad] プロパティにフォーカスを移動し、[表示] - [コード] コマンドを選択するか、ツールバーの <コード> ボタンをクリックします。
    あるいは、プロパティの右側の <ビルド> ボタンをクリックします。
    [ビルダの選択] ダイアログボックスが表示されますので「コード ビルダ」を選択し、[OK] ボタンをクリックします。
  10. モジュールウィンドウで、下記のコードを入力します。
          --------------------------------------------------------------------------
          Sub Form_Load()
            If  IsNull(Me.OpenArgs) = False Then
                'このフォームを開いた [フォーム 1] フォームから、
                '[社員コード](NewDate) を受け取ります。
                Me![社員コード] = Me.OpenArgs
            End If
          End Sub
          --------------------------------------------------------------------------
    
  11. [実行] - [モジュールのコンパイル] コマンドを選択するか、ツールバーの<コンパイル> ボタンをクリックします。エラーが表示されなければ、モジュールウィンドウを閉じてください。エラーが表示された場合は、入力ミスがないかどうか再度チェックしてください。
  12. フォームを保存してデザインビューを閉じます。
  13. [フォーム 1] フォームをフォームビューで開きます。[コンボボックス] 上で、[社員] テーブルに存在しない [社員コード] を入力します。
    メッセージ ボックス「"入力コード" はリストの中に存在しません。追加しますか?」が表示され、[はい (Y)] ボタンをクリックすると、[社員コード] にコンボ ボックスで入力したコードが代入された [社員] フォームが表示されます。データ入力後、[社員] フォームを閉じます。[フォーム 1] フォームに戻り、コンボ ボックスのドロップダウン矢印をクリックします。追加した [社員コード]、[氏名]、[フリガナ] が リストに表示されます。

■ 補足

本文に関する詳細は、次の参照先をご参照ください。
  『 Microsoft Access ユーザーズ ガイド』
      ・コンボ ボックスについて
    第 16 章 フォームのカスタマイズ.................P416 ~ P433
『オンラインヘルプ』
    「イベント プロシージャの作成」
    「 [リスト外入力時/OnNotInList] プロパティ」
    「 [NotInList] イベント」
    「 [読み込み時/OnLoad] プロパティ」
    「 [Load] イベント」
    「 [フォームを開く/OpenForm] アクション」
    「 [OpenArgs] プロパティ」
『 Microsoft Access リファレンス』
    「 [リスト外入力時/OnNotInList] プロパティ」...P789 ~ P790
    「 [NotInList] イベント」......................P347
    「 [読み込み時/OnLoad] プロパティ」............P785
    「 [Load] イベント」...........................P312
    「 [フォームを開く/OpenForm] アクション........P744 ~ P748
    「 [OpenArgs] プロパティ」.....................P385 ~ P386

Keywords: KBHOWTO KB403934
Technology: kbAccess200 kbAccessSearch

inserted by FC2 system