Проблема с Access 2010. Синтаксис команды SetFocus - PullRequest
0 голосов
/ 07 ноября 2018

Чрезвычайно загадочно: При открытии простой формы из другой формы с помощью vba курсор перемещается в определенное поле. Однако, когда это поле имеет значение Null, каждый второй раз Ошибка 2110. Используемый синтаксис меняется каждый раз, как показано ниже.

Еще более загадочно: При нажатии «Отладка» ошибка оказывается мнимой: в соответствующей строке кода можно просто продолжить с F5 или F8, и процедура завершается правильно с фокусировкой, где это необходимо.

Я нашел условный обходной путь , который не генерирует сообщение об ошибке, но хотел бы, если возможно, избежать такого хромающего кодирования:

'…
Debug.Print Me![MyTextField].Enabled    ' always True
Debug.Print Me.Name     ' always correct form
Me.Repaint
On Error Resume Next
       [MyTextField].SetFocus    ' without Me!
    Me![MyTextField].SetFocus
    ' Forms![MyForm]![MytextField] : same result as with Me!]
    ' one time error with Me! but not without Me!,
    ' next time vice versa, and so forth…
On Error GoTo 0
'…

Когда [MyTextField] не равно Null, оба синтаксиса работают нормально, не генерируя ошибку.

Что не так с этой командой .SetFocus? «Восстановление» базы данных не помогло.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Минти прав. Простой обходной путь - сделать это в операторе if или создать bool, чтобы увидеть, если IsNull (fieldhere) = true, тогда выйдите из sub или вашего действия здесь. Или, может быть, проще попробовать:

if MyTextField.gotfocus = true then
do something
else
MyTextField.setfocus

Недавно я столкнулся с этой проблемой в чем-то похожем, и мне пришлось создать публичную функцию bool и протестировать ее на событиях загрузки. Обратите внимание, что я новичок в доступе, так что, вероятно, есть много лучших способов выполнить это:)

0 голосов
/ 07 ноября 2018

Вы не можете установить фокус на элемент управления, который имеет фокус. Это даст вам очень простой способ настроить бесконечный цикл.

Сначала вам нужно будет установить фокус на другой элемент управления.

...