У меня есть форма с полем со списком. Поле со списком связано с таблицей. Когда я добавляю элемент, которого нет в Таблице/Списке - я спрашиваю, хочу ли я добавить новый элемент - Если да, открывается другая форма с новым элементом уже в одном из ящиков.
Связанная таблица содержит больше полей. Открывающаяся форма содержит эти поля - но при открытии они пусты - данных нет. Поля не являются обязательными.
Проблема: данные не сохраняются, если я только закрываю форму. Если я ввожу данные в одно из полей, данные сохраняются.
Как я могу принудительно обновить/сохранить, даже если я только закрываю/сохраняю форму....
Существующий код:
Private Sub Form_Open(Cancel As Integer)
Dim strFirstName As String, strLastName As String
If Not IsNull(Me.OpenArgs) Then
If Me.OpenArgs <> "New Contact" Then
Forms("NKTPersonnelF").PersName.DefaultValue = """" & Me.OpenArgs & """"
End If
End If
End Sub
Private Sub cmdClose_Click()
DoCmd.RunCommand acCmdSaveRecord
On Error Resume Next
If Me.Dirty Then Me.Dirty = False
If Err.Number = 0 Then
DoCmd.Close acForm, Me.Name
End If
End Sub





Когда вы открываете форму с новым элементом, просто установите Me.Dirty = True в событии OnOpen.
... а потом я посмотрел сообщение об ошибке, добавил строку «DoCmd.GoToControl «Отдел»» - и все заработало!
В качестве альтернативы вы также могли бы использовать Department.SetFocus, который лично я считаю более чистой альтернативой DoCmd.
Попробуйте использовать этот пример. Причина, по которой я использую запрос параметров, заключается в том, что он очень хорошо работает с кавычками. в то время как большинство других методов терпят неудачу.
Private Sub Combo1_NotInList(NewData As String, Response As Integer)
Dim qdf As DAO.QueryDef
Dim strtmp As String, strSQL As String
strtmp = " Add " & NewData & " As new item in the list ? "
If MsgBox(strtmp, vbYesNo + vbDefaultButton2 + vbQuestion, "Not in the list") = vbYes Then
strSQL = "INSERT INTO tblKatzinMR ( KatzinMR, Katzin ) SELECT [KatzinMR], [Katzin]"
Set qdf = CurrentDb.CreateQueryDef("", strSQL)
qdf.Parameters("KatzinMR").Value = Now()
qdf.Parameters("Katzin").Value = Trim(NewData)
qdf.Execute
qdf.Close
Set qdf = Nothing
'Notify Access about the new record, so it requeries the combo.
Response = acDataErrAdded
Else
Response = acDataErrContinue
End If
End Sub
Это сработало! Мой вопрос был плохо сформулирован, так что это был не тот ответ, который мне был нужен. Но он поможет мне решить мою следующую проблему, так что спасибо!!
Привет! Пытался добавить: Me.Dirty = True. Но потом получаю сообщение об ошибке... «Чтобы изменить данные через эту форму, фокус должен находиться в связанном поле, которое можно изменить». Private Sub Form_Open(Cancel As Integer ) Dim strFirstName как строка, strLastName как строка Если не IsNull(Me.OpenArgs) Тогда Если Me.OpenArgs <> "Новый контакт" Тогда Forms("NKTPersonnelF").PersName.DefaultValue = """" & Me.OpenArgs & " """ Me.Dirty = True End If End If End Sub