#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, затем ожидает, пока пользователь введет слово, и когда пользователь нажимает пробел, он записывает что-то еще на основе того, что пользователь ввел. Код не использует формы.