Use NotInList Event to Add a Record to Combo Box

    Some time we would like to add new items into Combo Box while it does not previously exists.
There are severals ways to do that :


1. Using Code to Add a Record to a Table:


 With this you need to set LimitToList property of the combo box  to Yes and writing into its OnNotInList event as below



Private Sub CustomerID_NotInList(NewData As String, _
            Response As Integer)
Dim Db As DAO.Database
Dim Rs As DAO.Recordset
Dim Msg As String
Dim NewID As String
On Error GoTo Err_CustomerID_NotInList
    If NewData = "" Then Exit Sub
    Msg = "'" & NewData & "' is not in the list." & vbCr & vbCr & "Do you want to add it?"
    If MsgBox(Msg, vbQuestion + vbYesNo) = vbNo Then
        Response = acDataErrContinue
        MsgBox "Please try again."
    Else
        Set Db = CurrentDb
        Set Rs = Db.OpenRecordset("Customers", dbOpenDynaset)
        ' Ask the user to input a new Customer ID.
        Msg = "Please enter a unique 5-character" & vbCr & "Customer ID."
        NewID = InputBox(Msg)
        Rs.FindFirst BuildCriteria("CustomerID", dbText, NewID)
        ' If the NewID already exists, ask for another new unique
        ' CustomerID
        Do Until Rs.NoMatch
           NewID = InputBox("Customer ID " & NewID & " already exists." & _
                    vbCr & vbCr & Msg, NewID & " Already Exists")
           Rs.FindFirst BuildCriteria("CustomerID", dbText, NewID)
        Loop
        ' Create a new record.
        Rs.AddNew
        ' Assign the NewID to the CustomerID field.
        Rs![CustomerID] = NewID
        ' Assign the NewData argument to the CompanyName field.
        Rs![CompanyName] = NewData
        ' Save the record.
        Rs.Update
        ' Set Response argument to indicate that new data is being added.
        Response = acDataErrAdded
    End If
    Exit_CustomerID_NotInList:
       Exit Sub
    Err_CustomerID_NotInList:
       ' An unexpected error occurred, display the normal error message.
       MsgBox Err.Description
       ' Set the Response argument to suppress an error message and undo
       ' changes.
       Response = acDataErrContinue
 End Sub


1. Using a Form to Add a New Record


You need to reprogram your OnNotInList event of this dropdown list as

Private Sub Des_NotInList(NewData As String, Response As Integer)
    Dim Result
    Dim Msg As String
    Dim CR As String
    CR = Chr$(13)
    ' Exit this subroutine if the combo box was cleared.
    If NewData = "" Then Exit Sub
    ' Ask the user if he or she wishes to add the new customer.
    Msg = "'" & NewData & "' is not in the list." & CR & CR
    Msg = Msg & "Do you want to add it?"
    If MsgBox(Msg, vbQuestion + vbYesNo) = vbYes Then
       ' If the user chose Yes, start the Customers form in data entry
       ' mode as a dialog form, passing the new company name in
       ' NewData to the OpenForm method's OpenArgs argument. The
       ' OpenArgs argument is used in Customer form's Form_Load event
       ' procedure.
       DoCmd.OpenForm "frmDestination", , , , acAdd, acDialog, NewData
    Else
       Me.Undo
       Response = acDataErrContinue
       Exit Sub
    End If
    ' Look for the customer the user created in the Customers form.
    Result = DLookup("[DesCode]", "dbo_tblDestination", "[DesCode]='" & NewData & "'")
    If IsNull(Result) Then
       ' If the customer was not created, set the Response argument
       ' to suppress an error message and undo changes.
       Response = acDataErrContinue
       ' Display a customized message.
       MsgBox "Please try again!"
    Else
       ' If the customer was created, set the Response argument to
       ' indicate that new data is being added.
       Response = acDataErrAdded
    End If
End Sub

 And in OnLoad event of the form frmDestination with

Private Sub Form_Load()
   If Not IsNull(Me.OpenArgs) Then
      ' If form's OpenArgs property has a value, assign the contents
      ' of OpenArgs to the CompanyName field. OpenArgs will contain
      ' a company name if this form is opened using the OpenForm
      ' method with an OpenArgs argument, as done in the Orders
      ' form's CustomerID_NotInList event procedure.
      Me![DesCode] = Me.OpenArgs
   End If
End Sub

You can see original post at Microsoft 197526 and allenbrowne.com

Comments

Popular posts from this blog

Reading excel file in asp.net

Generate Forms with fields without any development knowledge.