NotInList 事件發生於使用者在下拉式方塊清單中的下拉式方塊的文字方塊部分輸入值時。
語法
表達。NotInList (NewData、回應)
詞 代表 ComboBox 物件的變數。
參數
| 名稱 | 必要/選用 | 資料類型 | 描述 |
|---|---|---|---|
| 新數據 | 必要 | 字串 | Microsoft Access 用來將使用者在下拉式方塊的文字方塊部分輸入的文字傳遞至事件程式的字串。 |
| 回應 | 必要 | Integer | 設定值表示 NotInList 事件處理的方式。
Response引數可以是下列其中一個內建常數:
|
註解
發生此事件時若要執行巨集或事件程序,請將 OnNotInList 屬性設為巨集的名稱或 [事件程序]。
此事件讓使用者可將新值新增至下拉式方塊清單中。
LimitToList 屬性必須是設定為 [是] 發生 NotInList 事件。
NotInList 事件不會觸發 Error 事件。
NotInList 事件發生的下拉式方塊的 LimitToList 屬性設定為 [是]、 輸入不在清單中的值並嘗試移至另一個控制項或儲存記錄之後。 事件發生於完成所有的下拉式方塊的 Change 事件。
當 [ 自動展開] 屬性設定為 [是] 時,Access 會在使用者在下拉式方塊的文字方塊部分輸入字元時,選取清單中的相符值。 如果使用者輸入的字元符合 (清單中值的第一個字元,例如,使用者輸入 “Smith”,而 “Smithson” 是清單) 中的值,則當使用者移至另一個控制項或儲存記錄時,不會發生 NotInList 事件。 不過,Access 新增至使用者在範例中輸入的字元「兒子」 () 會在下拉式方塊的文字方塊部分選取字元。 如果使用者想要在這類 (情況下引發 NotInList 事件,例如,使用者想要將新名稱 「Smith」 新增至下拉式方塊清單) ,使用者可以在新值的最後一個字元之後輸入空格、退格鍵或 Delete 字元。
當 LimitToList 屬性設定為 [是] 且下拉式下拉式方塊清單時,即使 AutoExpand 屬性設定為 [否],Access 也會在使用者在下拉式方塊的文字方塊部分輸入字元時,選取清單中的相符值。 如果使用者按 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 支援與意見反應。