ComboBox.NotInList 事件 (Access)

NotInList 事件發生於使用者在下拉式方塊清單中的下拉式方塊的文字方塊部分輸入值時。

語法

運算式NotInList (NewData回應)

表達 代表 ComboBox 物件的變數。

參數

名稱 必要/選用 資料類型 描述
NewData 必要 字串 Microsoft Access 用來將使用者在下拉式方塊文字方塊部分中輸入的文字傳遞至事件程序的字串。
回應 必要 Integer 設定值表示 NotInList 事件處理的方式。 Response引數可以是下列其中一個內建常數:
  • acDataErrDisplay (預設值)向使用者顯示預設的訊息。 當您不想允許使用者將新值新增至下拉式方塊清單時,請使用此選項。
  • acDataErrContinue 不會向使用者顯示預設的訊息。 當您想要向使用者顯示自訂訊息時,請使用此功能。 例如,事件程序無法顯示自訂對話方塊詢問使用者是否想儲存新的項目。 回應為是,如果事件程序會將新的項目新增至清單與 Response引數設為 acDataErrAdded 。 如果沒有回應,事件程序會將 acDataErrContinueResponse引數。
  • acDataErrAdded 不會對使用者顯示一則訊息,但可讓您將項目新增至下拉式方塊清單中的 NotInList 事件程序。 新增專案之後,Access 會重新查詢下拉式方塊來更新清單。 Access 接著會根據下拉式方塊清單重新檢查字串,並將值儲存在下拉式方塊所系結的欄位中的 NewData 引數中。 如果字串不在清單中,Access 會顯示錯誤訊息。

註解

發生此事件時若要執行巨集或事件程序,請將 OnNotInList 屬性設為巨集的名稱或 [事件程序]。

此事件讓使用者可將新值新增至下拉式方塊清單中。

LimitToList 屬性必須是設定為 [是] 發生 NotInList 事件。

NotInList 事件不會觸發 Error 事件。

NotInList 事件發生的下拉式方塊的 LimitToList 屬性設定為 [是]、 輸入不在清單中的值並嘗試移至另一個控制項或儲存記錄之後。 事件發生於完成所有的下拉式方塊的 Change 事件。

AutoExpand 屬性設定為 [是] 時,Access 會在使用者于下拉式方塊的文字方塊部分輸入字元時,選取清單中的相符值。 例如,如果使用者輸入的字元符合清單中值的第一個字元 (,則使用者輸入 「Smith」 和 「Smithson」 是清單) 中的值,則當使用者移至另一個控制項或儲存記錄時,將不會發生 NotInList 事件。 不過,Access 新增到使用者在範例中輸入 (的字元「son」) 會在下拉式方塊的文字方塊部分中選取。 例如,如果使用者想要在這類情況下引發 NotInList 事件 (使用者想要將新名稱 「Smith」 新增至下拉式方塊清單) ,則使用者可以在新值的最後一個字元後面輸入 Space、Backspace 或 Delete 字元。

LimitToList 屬性設定為 [是] 且下拉式方塊清單被卸載時,Access 會在使用者于下拉式方塊的文字方塊部分輸入字元時,選取清單中的相符值,即使 AutoExpand 屬性設定為 [否]。 如果使用者 按 Enter 鍵 或移至另一個控制項或記錄,選取的值會出現在下拉式方塊中。 在此例中不會引發 NotInList 事件。 若要允許 NotInList 事件將觸發,不應該下拉式下拉式方塊清單的使用者。

範例

下列範例會使用 NotInList 事件將項目新增至下拉式方塊。

若要嘗試此範例,請在表單上建立名為 Colors 的下拉式方塊。 將下拉式方塊的 LimitToList 屬性設定為 [是]。 若要填入此下拉式方塊,將下拉式方塊的 RowSourceType 屬性設定為 [值] 清單中,並提供的 RowSource 屬性設定為以分號分隔的值清單。 例如,您可以提供下列值作為此屬性的設定:紅色;綠色;藍色。

接著,在表單上新增下列事件程序。 切換到 [表單檢視] 並在下拉式方塊的文字部分輸入新值。

注意事項

此範例會新增項目到未連結的下拉式方塊。 當您要新增項目到連結的下拉式方塊,要將值新增到基準資料來源中的欄位。 在大部分情況下,您不能只在新記錄中新增一個欄位;根據資料表中的資料結構,您可能需要新增一或多個欄位來滿足資料需求。 例如,新記錄必須包含組成主鍵之任何欄位的值。 如果您需要以動態方式將專案新增至系結的下拉式方塊,您必須提示使用者輸入所有必要欄位的資料、儲存新記錄,然後重新查詢下拉式方塊以顯示新值。

Private Sub Colors_NotInList(NewData As String, _ 
        Response As Integer) 
    Dim ctl As Control 
     
    ' Return Control object that points to combo box. 
    Set ctl = Me!Colors 
    ' Prompt user to verify they wish to add new value. 
    If MsgBox("Value is not in list. Add it?", _ 
         vbOKCancel) = vbOK Then 
        ' Set Response argument to indicate that data 
        ' is being added. 
        Response = acDataErrAdded 
        ' Add string in NewData argument to row source. 
        ctl.RowSource = ctl.RowSource & ";" & NewData 
    Else 
    ' If user chooses Cancel, suppress error message 
    ' and undo changes. 
        Response = acDataErrContinue 
        ctl.Undo 
    End If 
End Sub

下列範例會示範如何使用 NotInList 事件將項目新增至結合的下拉式方塊。

Private Sub cboDept_NotInList(NewData As String, Response As Integer)
    Dim oRS As DAO.Recordset, i As Integer, sMsg As String
    Dim oRSClone As DAO.Recordset

    Response = acDataErrContinue

    If MsgBox("Add dept?", vbYesNo) = vbYes Then
        Set oRS = CurrentDb.OpenRecordset("tblDepartments", dbOpenDynaset)
        oRS.AddNew
        oRS.Fields(1) = NewData
        For i = 2 To oRS.Fields.Count - 1
            sMsg = "What do you want for " & oRS(i).Name
            oRS(i).Value = InputBox(sMsg, , oRS(i).DefaultValue)
        Next i
        oRS.Update
        cboDept = Null
        cboDept.Requery
        DoCmd.OpenTable "tblDepartments", acViewNormal, acReadOnly
        DoCmd.GoToRecord acDataTable, "tblDepartments", acLast
    End If
End Sub

下列範例會顯示如何將項目加入到繫結的下拉式方塊中。

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

    On Error GoTo Error_Handler
    Dim intAnswer As Integer
    intAnswer = MsgBox("""" & NewData & """ is not an approved category. " & vbcrlf _
        & "Do you want to add it now?" _ vbYesNo + vbQuestion, "Invalid Category")

    Select Case intAnswer
        Case vbYes
            DoCmd.SetWarnings False
            DoCmd.RunSQL "INSERT INTO tlkpCategoryNotInList (Category) "
                & _ "Select """ & NewData & """;"
            DoCmd.SetWarnings True
            Response = acDataErrAdded
        Case vbNo
            MsgBox "Please select an item from the list.", _
                vbExclamation + vbOKOnly, "Invalid Entry"
            Response = acDataErrContinue

    End Select

    Exit_Procedure:
        DoCmd.SetWarnings True
        Exit Sub

    Error_Handler:
        MsgBox Err.Number & ", " & Error Description
        Resume Exit_Procedure
        Resume

End Sub

支援和意見反應

有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應