Запуск макроса слова при нажатии клавиш в документе - PullRequest
1 голос
/ 26 июня 2019

Я пытаюсь создать письменный помощник для MS Word, который дает мне советы во время письма. Для этого мне нужно проверить, нажаты ли буквенные или цифровые клавиши на клавиатуре, и, если это так, запустить макрос, который показывает всплывающее окно помощника, и выполнить фоновую работу.

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

Private Sub document_KeyPress(KeyAscii As Integer)
If KeyAscii > -1 Then
    MsgBox ("You Pressed a key")
End If
End Sub

Private Sub document_open()
    'This line may differ depending on whether you are running this from a document template or an add-in.
    Application.CustomizationContext = ThisDocument.AttachedTemplate
    ' Create the keybinding.
    KeyBindings.Add KeyCode:=BuildKeyCode(wdKeySpacebar), KeyCategory:=wdKeyCategoryMacro, Command:="MyMacro"
End Sub

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

Любой совет будет оценен.

Ответы [ 2 ]

1 голос
/ 26 июня 2019

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

Keybinding for a-x before this
y::
    send y
    StartLabel("a")
    return
z::
    send z
    StartLabel("a")
    return
Space::
    send {Space}
    StartLabel("a")
    return
Backspace::
    send {Backspace}
    StartLabel("a")
    return
^Backspace::
    send ^{Backspace} 
    StartLabel("a")
    return  

StartLabel(x)
{
    word:=ComObjActive("word.application")
    word.run( "Writeass" )  <-- macro name. No need to define the module first
}

Этот скрипт вызывает макрос каждый раз, когда нажимается одна из определенных клавиш.

С помощью простого bat-файла я могу запустить и закрыть скрипт (чтобы он не работал в фоновом режиме, когда wordt не открыт). Код Bat для запуска скрипта:

start C:\path to Autohotkey script\WriteAssistant.ahk

Bat-код для завершения скрипта (уничтожение процесса autoHotKey)

taskkill /im AutoHotkey.exe

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

Path = "C:\path\start.bat"
Shell Path

И что самое приятное, я не заметил потери скорости.

0 голосов
/ 26 июня 2019

Поскольку ваш вопрос подразумевает, что вы делаете это для себя и не пытаетесь развернуть этот макрос для других, вы можете просто назначить сочетание клавиш для макроса из Word Options, и вам не нужно писать пользовательский VBA для перехвата клавиатурысделать это.

  1. На вкладке Файл Word выберите Параметры
  2. Нажмите Настроить ленту
  3. Нажмите Сочетания клавиш: Настроить ...
  4. Выберите макросы изсписок категорий всех команд
  5. Найдите свой собственный макрос и назначьте пользовательскую последовательность клавиш

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...