Аналоги xlErrorHandler для Word/ Access VBA

#ms-access #ms-word #vba

#ms-access #ms-word #vba

Вопрос:

Кто-нибудь знает о каких-либо обработчиках для пользовательских разрывов Ctrl Break для Word / Access VBA?

Есть очень полезный обработчик Application.EnableCancelKey = xlErrorHandler для Excel, но мне нужно обрабатывать пользовательские перерывы в Access и Word.

Есть предложения?

Комментарии:

1. С Access вы можете компилировать в ACCDE и не беспокоиться об этом — на этом этапе у пользователя не будет программного доступа к IDE. Дайте мне знать, если это то, что вы ищете, и я могу опубликовать это в качестве ответа — я не уверен, собираетесь ли вы захватить / воздействовать на них или просто не допустить, чтобы это испортило выполнение.

2. Ну, мое временное решение таково: #If HostProject = "Access" Then ChangeProperty "AllowSpecialKeys", dbBoolean, False #ElseIf HostProject = "Word" Then Application.EnableCancelKey = wdCancelDisabled #Else Application.EnableCancelKey = xlErrorHandler #End If я просто отключаю разрыв пользователя, но мне действительно нужно решение для обработки разрывов, как в Excel, через xlErrorHandler

Ответ №1:

Для Word вы могли бы попробовать

 Application.EnableCancelKey = wdCancelInterrupt
  

Для Access я не знаю эквивалента. Я не думаю, что он предоставляется напрямую.

Способ заставить код проверять пользовательские события — добавить строку

 Application. DoEvents
  

внутри цикла. Поскольку эта строка замедляет код, ее следует выполнять каждые n итераций.

Комментарии:

1. Ну, я просто использую Application.EnableCancelKey = wdCancelDisabled для Word и некоторые функции ручной работы для разрешения специальных ключей для доступа, но это не полное решение. Мне нужно выполнить некоторые действия с пользовательскими перерывами, а не только подавить их.

2. Просто любопытно, что происходит при повторном нажатии escape? В худшем случае попробуйте вот это. Добавьте строку Application.DoEvents внутри вашего цикла. Это замедлило бы работу, поэтому вы можете захотеть выполнять это каждые 100 итераций или около того, но это приостановит выполнение цикла, чтобы посмотреть, нажата ли Esc и т.д. Работает для Excel и может работать и здесь.

3. Я хочу поймать разрыв пользователя Ctrl Break. Обработчик Excel позволяет мне это делать, но в Word и Access таких обработчиков нет. Do events не поможет, потому что я не хочу, чтобы пользователь заглядывал в код.

4. Это нормально. Потому что вы можете защитить свои модули паролем, чтобы предотвратить случайное открытие редактора