The AddItemToCombo Function
Public Function AddItemToCombo( _
strNewData As String, _
Optional strFormName As String, _
Optional strFieldName As String, _
Optional strRecordSource As String, _
Optional blnConfirm As Boolean = True, _
Optional strMsgPrompt As String, _
Optional strMsgTitle As String _
) As Integer
'Copyright (c) Brendan Reynolds/Timarco Ltd 1999.
'All rights reserved.
'e-mail [email protected]
'This function adds a new item to a combo box list,
'either by opening a form for the user to enter the
'data, or by opening a recordsource to add the data
'directly, and with or without first prompting the
'user, depending on the arguments passed to the
'function. Note that this function works only with a
'combo box that has a row source type of table/query.
'This function uses DAO code, and requires a reference
'to the DAO object library, which is not set by default
'in Access 2000.
'Arguments
'strNewData: The data to be added to the combo box.
'strFormName: The form, if any, to be opened.
'strFieldName: The field in the recordsource to which
'the data should be added, if adding via a recordset.
'strRecordSource: The table or query to which the data
'should be added, if adding via a recordset.
'blnConfirm: If True, the user will be prompted to
'confirm the addition of the new data.
'strMsgPrompt: The text to be displayed in the
'confirmation message box.
'strMsgTitle: The text to be used for the title of the
'confirmation message box.
'Return values
'acDataErrAdded if the new data was added, otherwise
'acDataErrContinue.
'Use (from the Not In List event of a combo box)
'Response = AddItemToCombo(NewData, "frmSomeForm")
'The user is prompted for confirmation, if the user
'confirms, the form "frmSomeForm" is opened to receive
'the new data.
'Response = AddItemToCombo( _
' strNewData:=NewData, _
' strFormName:="frmSomeForm", _
' strMsgPrompt:=strSomePrompt, _
' strMsgTitle:=strSomeTitle _
')
'As above, but the contents of the string variables
'strSomePrompt and strSomeTitle are substituted for
'the default prompt and title of the confirmation
'messagebox.
'Response = AddItemToCombo( _
' strNewData:=NewData, _
' strFormName:="frmSomeForm", _
' blnConfirm:= False _
')
'As above, but user is not prompted.
'Response = AddItemToCombo( _
' strNewData:=NewData, _
' strFieldName:="SomeField", _
' strRecordSource:="SomeTableOrQuery" _
')
'The user is prompted for confirmation, if the user
'confirms, a recordset is opened to add the new data
'to the field "SomeField" in the table or query
'"SomeTableOrQuery"
'Response = AddItemToCombo( _
' strNewdata:=NewData, _
' strFieldName:="SomeField", _
' strRecordSource:="SomeTableOrQuery", _
' strMsgPrompt:=strSomePrompt, _
' strMsgTitle:=strSomeTitle _
')
'As above, but the contents of the string variables
'strSomePrompt and strSomeTitle are substituted for
'the default prompt and title of the confirmation
'messagebox.
'Response = AddItemToCombo( _
' strNewData:=NewData, _
' strFieldName:="SomeField", _
' strRecordSource:="SomeTableOrQuery", _
' blnConfirm:=False _
')
'As above, but user is not prompted.
'Note that while all arguments except the strNewData
'argument are optional, either a form name or a field
'name and recordsource must be specified, otherwise
'the function will raise an error (Error 3141).
On Error GoTo Err_Routine
Dim intResponse As Integer
Dim lngErrNum As Long
Dim db As DAO.Database
Dim rst As DAO.Recordset
If blnConfirm = True Then
'Prompt for confirmation.
If strMsgPrompt = vbNullString Then
'No prompt specified, so use the default.
strMsgPrompt = "The item '" & strNewData _
& "' you entered is not in the list. " _
& "Do you want to add '" & strNewData _
& "' to the list?"
End If
If strMsgTitle = vbNullString Then
'No title specified, so use the default.
strMsgTitle = "Add Item To List?"
End If
intResponse = MsgBox(strMsgPrompt, _
vbYesNo + vbQuestion, _
strMsgTitle)
Else
'No prompt for confirmation.
intResponse = vbYes
End If
If intResponse = vbNo Then
'Don't add the new data.
AddItemToCombo = acDataErrContinue
ElseIf strFormName = vbNullString Then
'No form specified, so open a recordset.
Set db = CurrentDb
Set rst = db.OpenRecordset("SELECT " _
& strFieldName & " " _
& "FROM " & strRecordSource & " " _
& "WHERE False")
With rst
.AddNew
.Fields(strFieldName) = strNewData
.Update
.Close
End With
Set rst = Nothing
db.Close
Set db = Nothing
AddItemToCombo = acDataErrAdded
Else
'Open a form.
DoCmd.OpenForm FormName:=strFormName, _
DataMode:=acFormAdd, _
WindowMode:=acDialog, _
OpenArgs:=strNewData
AddItemToCombo = acDataErrAdded
End If
Exit_Routine:
On Error Resume Next
rst.Close
Set rst = Nothing
db.Close
Set db = Nothing
Exit Function
Err_Routine:
lngErrNum = Err.Number
Select Case Err
'
Case Else
Err.Raise lngErrNum
Resume Exit_Routine
End Select
End Function
Download this function in plain text format, ready for import into your own Microsoft Access 97 or Microsoft Access 2000 application, here. |