Share via


ComboBox.NotInList-Ereignis (Access)

Das NotInList-Ereignis tritt auf, wenn der Benutzer in das Textfeld eines Kombinationsfelds einen Wert eingibt, der nicht in der Liste des Kombinationsfelds enthalten ist.

Syntax

Ausdruck. NotInList (NewData, Response)

Ausdruck Eine Variable, die ein ComboBox-Objekt darstellt.

Parameter

Name Erforderlich/Optional Datentyp Beschreibung
NewData Erforderlich String Eine Zeichenfolge, die Microsoft Access verwendet, um den Text zu übergeben, den der Benutzer in den Textfeldteil des Kombinationsfelds eingegeben hat, an die Ereignisprozedur.
Antwort Erforderlich Integer Diese Einstellung gibt an, wie auf das NotInList -Ereignis reagiert wurde. Das Argument Response kann eine der folgenden systeminternen Konstanten sein:
  • acDataErrDisplay (Standardeinstellung) Zeigt die Standardmeldung für den Benutzer an. Verwenden Sie diese Option, wenn Sie dem Benutzer nicht erlauben möchten, der Kombinationsfeldliste einen neuen Wert hinzuzufügen.
  • acDataErrContinue zeigt nicht die Standardmeldung für den Benutzer an. Verwenden Sie diese Option, wenn Sie dem Benutzer eine benutzerdefinierte Meldung anzeigen möchten. So könnte die Ereignisprozedur beispielsweise ein benutzerdefiniertes Dialogfeld mit der Frage anzeigen, ob der Benutzer den neuen Eintrag speichern möchte. Wenn die Antwort "Ja" lautet, würde die Ereignisprozedur den neuen Eintrag zur Liste hinzufügen und das Argument Response auf acDataErrAdded festlegen. Wenn die Antwort "Nein" lautet, würde die Ereignisprozedur das Argument Response auf acDataErrContinue festlegen.
  • acDataErrAdded zeigt keine Meldung für den Benutzer an, ermöglicht es jedoch, den Eintrag zur Kombinationsfeldliste in der NotInList -Ereignisprozedur hinzuzufügen. Nachdem der Eintrag hinzugefügt wurde, aktualisiert Access die Liste, indem das Kombinationsfeld erneut abgefragt wird. Access überprüft dann erneut die Zeichenfolge anhand der Kombinationsfeldliste und speichert den Wert im Argument NewData in dem Feld, an das das Kombinationsfeld gebunden ist. Wenn die Zeichenfolge nicht in der Liste enthalten ist, zeigt Access eine Fehlermeldung an.

HinwBemerkungeneise

Um ein Makro oder eine Ereignisprozedur auszuführen, wenn dieses Ereignis auftritt, legen Sie die OnNotInList-Eigenschaft auf den Namen des Makros oder auf [Ereignisprozedur] fest.

Dieses Ereignis ermöglicht dem Benutzer, einen neuen Wert zum Listenfeld eines Kombinationsfelds hinzuzufügen.

Die LimitToList-Eigenschaft muss auf Ja festgelegt werden, damit das NotInList-Ereignis eintritt.

Das NotInList-Ereignis löst das Error-Ereignis nicht aus.

Das NotInList-Ereignis tritt für Kombinationsfelder ein, deren LimitToList-Eigenschaft auf "Ja" festgelegt ist, und zwar wenn Sie einen Wert eingeben, der nicht in der Liste enthalten ist, und versuchen, zu einem anderen Steuerelement zu wechseln oder den Datensatz zu speichern. Es tritt nach allen Change-Ereignissen für das Kombinationsfeld ein.

Wenn die AutoExpand-Eigenschaft auf Ja festgelegt ist, wählt Access übereinstimmende Werte in der Liste aus, während der Benutzer Zeichen in den Textfeldteil des Kombinationsfelds eingibt. Wenn die vom Benutzer eingegebenen Zeichen mit den ersten Zeichen eines Werts in der Liste übereinstimmen (z. B. gibt der Benutzer "Smith" ein, und "Smithson" ist ein Wert in der Liste), tritt das NotInList-Ereignis nicht auf, wenn der Benutzer zu einem anderen Steuerelement wechselt oder den Datensatz speichert. Die Zeichen, die Access den Vom Benutzer eingegebenen Zeichen (im Beispiel "son") hinzufügt, werden jedoch im Textfeldteil des Kombinationsfelds ausgewählt. Wenn der Benutzer das NotInList-Ereignis in solchen Fällen auslösen möchte (z. B. möchte der Benutzer den neuen Namen "Smith" zur Kombinationsfeldliste hinzufügen), kann der Benutzer nach dem letzten Zeichen im neuen Wert ein Leerzeichen, ein Rücktastenzeichen oder ein Löschen-Zeichen eingeben.

Wenn die LimitToList-Eigenschaft auf Ja festgelegt ist und die Kombinationsfeldliste gelöscht wird, wählt Access übereinstimmende Werte in der Liste aus, während der Benutzer Zeichen in den Textfeldteil des Kombinationsfelds eingibt, auch wenn die AutoExpand-Eigenschaft auf Nein festgelegt ist. Wenn der Benutzer die EINGABETASTE drückt oder zu einem anderen Steuerelement oder Datensatz wechselt, wird der ausgewählte Wert im Kombinationsfeld angezeigt. In diesem Fall wird das NotInList -Ereignis nicht angewendet. Wenn das NotInList-Ereignis trotzdem ausgelöst werden soll, darf der Benutzer die Kombinationsfeldliste nicht öffnen.

Beispiel

Das folgende Beispiel verwendet das Ereignis NotInList, um einen Eintrag zu einem Kombinationsfeld hinzuzufügen.

Um dieses Beispiel auszuprobieren, erstellen Sie ein Kombinationsfeld namens Farben in einem Formular. Legen Sie dessen LimitToList-Eigenschaft auf "Ja" fest. Legen Sie zum Auffüllen des Kombinationsfelds dessen RowSourceType-Eigenschaft auf "Wertliste" fest, und geben Sie eine Liste von durch Semikolons getrennten Werten als Einstellung für die RowSource-Eigenschaft ein. Sie können beispielsweise die folgenden Werte als Einstellung für diese Eigenschaft angeben: Rot; Grün; Blau.

Fügen Sie anschließend dem Formular die nachstehende Ereignisprozedur hinzu. Wechseln Sie zur Formularansicht, und geben Sie im Textfeld des Kombinationsfelds einen neuen Wert ein.

Hinweis

Im vorstehenden Beispiel wird ein Eintrag zu einem ungebundenen Kombinationsfeld hinzugefügt. Wenn Sie einen Eintrag zu einem gebundenen Kombinationsfeld hinzufügen, fügen Sie damit einen Wert zu einem Feld in der zugrunde liegenden Datenquelle hinzu. In den meisten Fällen können Sie einem neuen Datensatz nicht einfach ein Feld hinzufügen. Abhängig von der Struktur der Daten in der Tabelle müssen Sie wahrscheinlich ein oder mehrere Felder hinzufügen, um die Datenanforderungen zu erfüllen. Beispielsweise muss ein neuer Datensatz Werte für alle Felder enthalten, die den Primärschlüssel enthalten. Wenn Sie einem gebundenen Kombinationsfeld Elemente dynamisch hinzufügen müssen, müssen Sie den Benutzer auffordern, Daten für alle erforderlichen Felder einzugeben, den neuen Datensatz zu speichern und dann das Kombinationsfeld erneut abzufragen, um den neuen Wert anzuzeigen.

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

Das folgende Beispiel zeigt, wie Sie das Ereignis NotInList verwenden, um einen Eintrag zu einem gebundenen Kombinationsfeld hinzufügen.

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

Das folgende Beispiel zeigt, wie Sie einem gebundenen Kombinationsfeld ein Element hinzufügen.

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

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.