Доброго времени суток
Столкнулся с непонятной проблемой. Добавил код на событие "отсутствие в списке" в поле со списком на форме, который должен открывать другую форму для добавления нового значения, отсутствующего в списке. Этот код я уже много раз применял в этой базе, да даже на этой форме у меня еще 2 поля со списком, в которых таким же образом реализовано добавление записей "не в списке". Вот код:
IzmenenieSpiska = MsgBox("Добавить нового производителя " & NewData & " в список?", vbYesNo)
If IzmenenieSpiska = vbNo Then 'если не захотели добавлять производителя
Me.[Id_производитель_вр].Undo
Response = acDataErrContinue 'Сообщает Access о запрете вывода сообщения об ошибке.
Else 'если добавляем нового производителя
Response = acDataErrAdded
DoCmd.OpenForm "Новый_производитель", , , , , acDialog, (NewData)
[Id_производитель_вр].Undo
[Id_производитель_вр].Requery
'------------проверка внесли ли нового производителя в таблицу Новый производитель
Set rs1 = CurrentDb.OpenRecordset("SELECT [Производитель] FROM [Производитель] WHERE [Производитель]= '" & NewData & "' ")
If rs1.EOF Then
[Id_производитель_вр] = Null
Else
[Id_производитель_вр] = rs1![Производитель]
End If
Set rs1 = Nothing
'/------------проверка внесли ли нового производителя в таблицу Новый производитель
End If
End Sub
При добавлении нового значения в поле со списком вызывается это событие, обрабатывается msgbox, выдается сообщение "Добавить нового производителя", а вот дальше вне зависимости от того что нажмешь - ок или отменя, выполнение кода прерывается и выдается сообщение "Введенный текст не соответствует ни одному из элементов списка", дальше ничего не происходит. Я уж пробовал все настройки поля перепроверить, выставил такие же, как и в полях, где все работает.
Дальше еще интереснее. Если на msgbox добавить брейкпоинт, вызвать событие - откроется окно вба с выделенной строчкой msgbox, далее нажимаем Run sub (продолжаем выполнение кода) и о чудо - все работает нормально.
Далее методом научного тыка я выяснил, что если удалить из события Private Sub Form_KeyPress(KeyAscii As Integer) строчки, которые обращаются к Screen.ActiveControl.Name, то опять же все отрабатывается нормально.
Только проблема в том, что мне нужно определять Screen.ActiveControl.Name в этом событии.
Как быть? Как исправить? Может чем-то другим заменить Screen.ActiveControl.Name? Непонятная ерунда какая-то.
http://www.sql.ru/forum/1241057/problemy-s-vyzovom-formy-po-sobytiu-otsutstvie-v-spiske