ComboBox の NotInList イベントを使用します。簡単なサンプルを次に示します。
Private Sub PersonID_NotInList(NewData As String, Response As Integer)
Dim Result As VbMsgBoxResult, NewPersonID As Long, MaxPersonID As Long
On Error GoTo Err_PersonID_NotInList
Response = acDataErrDisplay
Result = MsgBox("'" & NewData & "' is not currently in the database. " & _
"Would you like to add '" & NewData & _
"' to the database?", vbYesNo + vbExclamation, _
"Person Not In List")
If Result = vbYes Then
MaxPersonID = DMax("PersonID", "People")
DoCmd.OpenForm "AddPerson", , , , acFormAdd, acDialog, NewData
NewPersonID = DMax("PersonID", "People")
If NewPersonID > MaxPersonID Then
Me.PersonID = NewPersonID
Me.PersonID.Requery
Response = acDataErrAdded
End If
End If
Exit_PersonID_NotInList:
Exit Sub
Err_PersonID_NotInList:
MsgBox Err.Description
Resume Exit_PersonID_NotInList
End Sub
ノート:
- DMax の使用は、新しく追加された PersonID を取得する信頼できる方法ではありませんが、サンプルを読みやすくします。代わりに使用する必要があります
SELECT @@Identity
(詳細については Google)。
- NewData を OpenArg として "AddPerson" フォームに渡しました。これにより、AddPerson フォームを開くときに、個人の名前を事前入力できます。