次の方法で共有


連結されたコンボ ボックスに値を追加する

コンボ ボックスは一般に、テーブルまたはクエリで値のリストを表示するために使用されます。 NotInList イベントに応答することにより、リストにない値を追加する手段をユーザーに提供することができます。

コンボ ボックスに表示される値は多くの場合、関連テーブル内のレコードから取得されます。 リストはテーブルまたはクエリから派生するため、基礎となるテーブルに新しいレコードを入力する手段をユーザーに提供する必要があります。 その後、Requery メソッドを使用してリストを再クエリし、新しい値をリストに取り込むことができます。

リストにない値をユーザーがコンボ ボックスに入力したとき、コンボ ボックスの "LimitToList/入力チェック" プロパティが [Yes/はい] に設定されていればコンボ ボックスの NotInList イベントが発生し、そうでない場合はコンボ ボックスの連結された列以外の列がボックスに表示されます。 NotInList イベントのイベント プロシージャを記述することにより、リストの値を供給するテーブルに新しいレコードを追加する手段をユーザーに提供できます。 NotInList イベント プロシージャには、ユーザーが入力したテキストをイベント プロシージャに渡すために Access が使用する、NewData という名前の文字列引数が含まれます。

NotInList イベント プロシージャには、プロシージャ実行後の Access の処理を指定する Response 引数もあります。 イベント プロシージャで行う処理に応じて、Response 引数には次の 3 つの定義済み定数値のいずれかを設定します。

定数 説明
acDataErrAdded イベント プロシージャでリストのレコード ソースに新しい値を入力するか、またはユーザーがその入力を行うための手段を提供する場合、Response 引数を acDataErrAdded に設定します。 入力後、Access はコンボ ボックスを自動的に再クエリし、新しい値をリストに追加します。
acDataErrDisplay 新しい値を追加せず、Access で既定のエラー メッセージを表示する場合は、 Response 引数を acDataErrDisplay に設定します。 Access はリストにある有効な値の入力をユーザーに求めるメッセージを表示します。
acDataErrContinue イベント プロシージャで独自のメッセージを表示する場合、Response 引数を acDataErrContinue に設定します。 Access は既定のエラー メッセージを表示しませんが、引き続きフィールドに値を入力するようユーザーに求めます。 ユーザーがリストから既存の値を選択したくない場合は、Undo メソッドを使用してフィールドの変更を 元に戻 すことができます。

たとえば、次のイベント プロシージャは、リストに値を追加するかどうかをユーザーに確認し、値を追加します。最後に Response 引数を使用して、リストを再クエリするよう Access に指示します。

Private Sub ShipperID_NotInList(NewData As String, Response As Integer)

   Dim dbsOrders As DAO.Database
   Dim rstShippers As DAO.Recordset
   Dim intAnswer As Integer

On Error GoTo ErrorHandler

   intAnswer = MsgBox("Add " & NewData & " to the list of shippers?", _
      vbQuestion + vbYesNo)

   If intAnswer = vbYes Then

      ' Add shipper stored in NewData argument to the Shippers table.
      Set dbsOrders = CurrentDb
      Set rstShippers = dbsOrders.OpenRecordset("Shippers")
      rstShippers.AddNew
      rstShippers!CompanyName = NewData
      rstShippers.Update

      Response = acDataErrAdded         ' Requery the combo box list.
   Else
      Response = acDataErrDisplay       ' Require the user to select
                                        ' an existing shipper.
   End If

   rstShippers.Close
   dbsOrders.Close

   Set rstShippers = Nothing
   Set dbsOrders = Nothing

   Exit Sub

ErrorHandler:
   MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Sub

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。