我要创建的是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
第一个完全不起作用,第二秒覆盖了键绑定,这使此示例中的空格键无效。在第二个示例中,我还必须为每个字符分配一个绑定。
任何建议将不胜感激。
答案 0 :(得分:1)
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)