Разделенная форма Access 2007 VBA: acNewRec при открытии предотвращает переход через форму — действует так, как будто первое поле не «выбрано»

Я надеюсь, что кто-то может помочь мне или, по крайней мере, помочь найти обходной путь.

Я использую функцию разделенной формы Access 2007, и приведенный ниже код запускается в событии Form_Open, а также после двух событий button_click. Код отлично работает при запуске после события button_click, но когда он запускается при событии form_open, он вызывает проблемы.

Если форма открыта и пользователь вводит текст в первое поле, он/она не может использовать Tab или мышь для выбора следующего поля формы. Пользователь застревает в первом поле формы, пока не нажмет Esc, чтобы отменить ввод данных. Чтобы успешно ввести данные в первое поле формы, когда форма открыта, пользователь должен сначала выбрать другое поле формы, затем повторно выбрать первое поле формы, а затем ввести текст в первое поле формы. После этой ерунды пользователь МОЖЕТ выбрать следующее поле формы с помощью Tab или мыши. Это необходимо выполнять один раз при каждом запуске формы. Тот же код VBA для событий button_click работает нормально.

Примечательно: при первом открытии формы НИ ОДНО из полей формы в разделе таблицы формы не отображается как «Выбрано». Когда пользователь начинает вводить данные в первое поле формы, маркер «новая запись» (*) перемещается во вторую строку, как и должно быть, но первая строка не показывает вводимые данные. Такое поведение странно.

После выполнения очистки поля щелкните другое поле, вернитесь к первому обходному пути, описанному выше, в таблице данных отображаются правильно выбранные поля и данные по мере их ввода.

Любые идеи? Это ошибка? Есть ли простой обходной путь, например, обходной путь выбора поля через VBA при открытии формы?

Любая помощь очень ценится.

Код:

DoCmd.ApplyFilter , "([Contractor].[CheckOutStamp] Is Null)"
DoCmd.GoToRecord , "", acNewRec

Ссылка на mdb: https://docs.google.com/leaf?id=0B-jx09cwIQDsYWM2MzMzMDQtYjUzNi00N2E5LWFjYTktNzFiYWYzMDZiYWU1&hl=en&authkey=CPPmoMEF


person goofology    schedule 28.10.2010    source источник


Ответы (1)


Некоторые мысли:

Попробуйте переместить его из OnOpen в OnLoad. События в OnOpen могут происходить до фактической загрузки данных, тогда как OnLoad происходит после того, как это уже сделано.

Кроме того, вы можете просто установить для свойства Filter формы значение [Contractor].[CheckOutStamp] Is Null, установить для FilterOn значение Yes и установить для формы значение DataEntry, что означает, что при открытии по умолчанию используется новая запись, а старые записи не загружаются. После того, как он открыт, вы можете изменить режим редактирования/добавления формы на любой другой.

person David-W-Fenton    schedule 28.10.2010
comment
Вы, сэр, восхитительны! Это сработало как шарм. Большое спасибо! - person goofology; 29.10.2010
comment
Простое перемещение кода в событие OnLoad устранило конкретную проблему, с которой я столкнулся. Свойство DataEntry работало так, как было заявлено, но мне было бесполезно, так как мне нужно, чтобы старые записи отображались при загрузке. Я пошел дальше и установил свойство Filter и FilterOn, как вы предложили, чтобы фильтровать, если пользователь не включает VBA, но я также оставил код фильтра VBA. - person goofology; 30.10.2010
comment
Просто имейте в виду, что если вы отредактируете источник записи, свойства фильтра будут сброшены. - person David-W-Fenton; 31.10.2010