我有Combobox,可以让用户编辑此字段的相关值 - 使用按钮cboBEA。我决定在想要添加新值时使用NotInList例程。编辑部分顺利运行,但NotInList部分需要在名为frmBEA_JDIR
的弹出窗体中提供相关字段后接受一个值首先,cboBEA的重新查询不起作用,所以我首先将其设置为""""""""""""""""然后是rowsource的实际SQL。
以下是" Save"中的代码。弹出窗体的按钮frmBEA_JDR
Private Sub cmdSave_Click()
Select Case Me.OpenArgs
Case "Edit"
DoCmd.Save
DoCmd.Close acForm, "frmBEA_JDIR"
With Form_sfm_AddSPDistro
.cboBEA.Requery
.cboBESA.Requery
.cmbPROGRAM.RowSource = ""
.cmbPROGRAM.RowSource = "SELECT * FROM qLU_BEA_JDIR;"
.cmbPROGRAM = .cboBEA
End With
Case "AddNew"
Dim strSQL As String
strSQL = "SELECT LU_BEA_JDIR.ID, LU_BEA_JDIR.BEA, LU_BEA_JDIR.BESA, LU_BEA_JDIR.ORGANIZATION " _
& "FROM LU_BEA_JDIR;"
With Form_sfm_AddSPDistro
'cboBEA.Requery doesn't work, so...
.cboBEA.RowSource = ""
.cboBEA.RowSource = strSQL
.cboBESA.Requery
.cboBEA.Value = Me.txtBEA
.cmbPROGRAM.RowSource = ""
.cmbPROGRAM.RowSource = "SELECT * FROM qLU_BEA_JDIR;"
.cmbPROGRAM = .cboBEA
End With
DoCmd.Close acForm, "frmBEA_JDIR"
End Select
End Sub
以下是调用表单的NotInList事件:
Private Sub cboBEA_NotInList(NewData As String, Response As Integer)
Dim MsgBoxAnswer As Variant
Response = acDataErrContinue
Me!cboBEA.Undo 'Used this to prevent the requery error caused by frmBEA_JDIR
MsgBoxAnswer = MsgBox(NewData & " is not in the list. Do you want to add it?", vbQuestion + vbYesNo, "Add " & NewData & "?")
If MsgBoxAnswer = vbNo Then
Me.cboBEA = Null
DoCmd.GoToControl "cboBEA"
Else
DoCmd.OpenForm "frmBEA_JDIR", acNormal, , , acFormAdd, , "AddNew"
Form_frmBEA_JDIR.txtBEA = NewData
End If
End Sub
因此,根据调用此形式的内容 - NotInList或Edit,我将其放在调用frmBEA_JDIR的openargs参数中。这是我在SAVE按钮中处理更新的方法。同样,编辑部分工作得很好,但是NotInList事件中的AddNew即使在被重新查询后也不会填充cboBEA,我可以在其中看到新值。
答案 0 :(得分:0)
简而言之:让acFormAdd
为你完成,而不是通过openargs确定弹出窗口中的内容。 acFormAdd
会将表单打开到新记录中。
以openargs发送新数据。
在对话框模式下打开frmBEA_JDIR。它会在打开的表单关闭之前停止当前代码。
' open frmBEA_JDIR in dialog mode to add the new data.
DoCmd.OpenForm "frmBEA_JDIR", acNormal, , , acFormAdd, acDialog, "NewData"
'data is added, now requery the dropdown
cboBEA.Requery
在没有'案例编辑的情况下愚弄这个'部分,直到你看到它工作。然后使用acFormEdit
添加编辑部分。您可以检查弹出窗体的数据代码,看看它是否可以添加或编辑。