Сбой события нажатия клавиши вне редактора VBA в MS Word

#vba #ms-word

#vba #ms-word

Вопрос:

У меня есть код VBA и часть кода, в частности, событие нажатия клавиши пробел работает (хотя и не всегда), когда оно выполняется в редакторе VBA в MS Word. Но снаружи, т. е. если я включу модуль в normal.dotm или помещу его как .dotm в папку запуска MS Word, затем назначу макрос кнопке в MS Word и попытаюсь запустить его, код не будет работать должным образом. Код работает, но часть, которая обрабатывает событие нажатия клавиши пробел, не работает.

Я использую MS Office 2010 версии 14.0.7229.5000 (64-разрядная версия). Если это имеет значение, все приложения MS Office запускаются на сервере, и мы являемся клиентами, получающими доступ к приложениям по RDP протоколу.

Часть объявления

     #If VBA7 Then
    Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal vKey As 
    Long) As Integer
    #End If
    Private Const VK_SPACE = amp;H20
  

и часть, которая должна обрабатывать событие нажатия клавиши

     Do Until GetAsyncKeyState(VK_SPACE)
        'exit when Spacebar key is pressed
        DoEvents
    Loop
  

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

1. Я забыл добавить, что мой компьютер (клиентский ПК) работает под управлением Linux (xubuntu), но графический интерфейс выглядит как Windows ‘. Клиент RDP Remina подключается к MS Windows Server 2012 R2 на сервере. Возможно, мне следует использовать библиотеки Linux, но я не уверен, потому что приложения MS Office запускаются на сервере Windows, а не на клиентском ПК.

2. Почему вы не используете реальные обработчики событий?

3. Как мне это сделать? Предполагается, что код выполняет следующее: он преобразует число в текст в MS Word, затем ожидает, пока пользователь введет слово, и когда пользователь нажимает пробел, он записывает что-то еще на основе того, что пользователь ввел. Код не использует формы.