在文档中的按键上运行Word宏

时间:2019-06-26 09:24:35

标签: vba ms-word

我要创建的是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 个答案:

答案 0 :(得分:1)

通过帖子中共享的链接,我遇到了一个名为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

结束脚本的终止代码(杀死autoHotKey进程)

taskkill /im AutoHotkey.exe

我使用以下vba脚本从word宏启动和关闭热键脚本(在我的情况下,我在功能区上创建了一个按钮以启动宏,而它要做的第一件事就是启动autoHotKey脚本):

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

最重要的是,我没有发现任何速度损失。

答案 1 :(得分:0)

由于您的问题意味着您是在为自己执行此操作,而不是尝试将此宏部署给其他人,因此您可以简单地从Word Options中为宏分配键盘快捷方式,而不必编写自定义键盘来将VBA捕获到做这个。

  1. 从Word的“文件”选项卡中选择“选项”
  2. 点击自定义功能区
  3. 单击键盘快捷键:自定义...
  4. 从“所有命令类别”列表中选择宏
  5. 找到自定义宏并分配自定义键盘顺序

enter image description here