Проверка орфографии VBA в O365 (Access 2016) Сбой доступа - PullRequest
0 голосов
/ 03 мая 2018

Я выполнил следующий код On Lost Focus в Access 2010 без проблем.

Dim strSpell
 strSpell = txtMyField
 If IsNull(Len(strSpell)) Or Len(strSpell) = 0 Then
 Exit Sub
 End If
 With txtMyField
 .SetFocus
 .SelStart = 0
 .SelLength = Len(strSpell)
 End With
 DoCmd.SetWarnings False
 DoCmd.RunCommand acCmdSpelling
 DoCmd.SetWarnings True

После обновления до O365 (Access 2016) проверка орфографии работает без проблем, если только не было несколько исправлений орфографии. Если пользователь выбирает «Заменить все» или изменяет более 1 слова, сбой доступа и пользователю необходимо перезапустить программу. Я пытался изменить код для запуска события «Выход», но это не помогло. Я также декомпилировал базу данных и не нашел ошибок.

Единственный способ запустить проверку правописания - использовать проверку правописания на ленте. Я скрываю ленту, чтобы пользователи не возились, поэтому эта опция не будет работать. Кроме того, я хотел бы ограничить проверку орфографии одним полем и заставить ее после того, как пользователь покинет поле.

Я предполагаю, что Access дает сбой, потому что более чем одно исправление снова вызывает событие, и так как Проверка орфографии уже запускает сбой программы. Есть идеи как это исправить?

ОБНОВЛЕННЫЕ ЗАМЕЧАНИЯ ИЗ КОММЕНТАРИЙ

  • В моем тестировании я обнаружил, что когда вы нажимаете Enter несколько раз, когда вы введите в поле, это вызывает сбой программы.
  • Текстовое поле ДЛИТЕЛЬНЫЙ ТЕКСТ
  • Поле формы привязано к текстовому полю

1 Ответ

0 голосов
/ 04 мая 2018

Мне удалось повторить процесс зависания сообщения «Не отвечает» с длинным текстовым полем и 3500 символами и большим количеством элементов с «орфографическими ошибками».

Использование вашего кода приведет к сбою с кодом LostFocus или даже, если я добавлю его в командную кнопку.

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

Когда я переместил ваш код из события LostFocus и заменил его на этот код в событии Exit, он надежно работал

РЕДАКТИРОВАТЬ: перемещенный код в событие выхода и указанное конкретное текстовое поле

Private Sub txtMyField_Exit(Cancel As Integer)

    With txtMyField
        'If the textbox has data run the Spell Checker   
        If Len(.Value & "") > 0 Then
            .SetFocus
            .SelStart = 0
            .SelLength = Len(.Value)
            DoCmd.SetWarnings False
            DoCmd.RunCommand acCmdSpelling
            DoCmd.SetWarnings True
            .SelLength = 0
        End If
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...