Vba 使用CommandParameter添加KeyBindings以调用sub()
我想添加将调用带有参数的子对象的键绑定。例如:Vba 使用CommandParameter添加KeyBindings以调用sub(),vba,parameters,ms-word,key-bindings,Vba,Parameters,Ms Word,Key Bindings,我想添加将调用带有参数的子对象的键绑定。例如: Sub dummy(text As String) MsgBox (text) End Sub Dim kbNew As KeyBinding Set kbNew = KeyBindings.Add(KeyCategory:=wdKeyCategoryCommand, Command:="dummy", KeyCode:=BuildKeyCode(wdKeyControl, wdKeyAlt, wdKeyQ), Com
Sub dummy(text As String)
MsgBox (text)
End Sub
Dim kbNew As KeyBinding
Set kbNew = KeyBindings.Add(KeyCategory:=wdKeyCategoryCommand, Command:="dummy", KeyCode:=BuildKeyCode(wdKeyControl, wdKeyAlt, wdKeyQ), CommandParameter:="show me")
这是行不通的。但当我使用MS docs中的示例时,它起到了作用:
Set kbNew = KeyBindings.Add(KeyCategory:=wdKeyCategoryCommand, Command:="FontSize", KeyCode:=BuildKeyCode(wdKeyControl, wdKeyAlt, wdKeyQ), CommandParameter:="8")
调用不带参数的子对象也可以:
Sub dummy()
MsgBox ("show me")
End Sub
Set kbNew = KeyBindings.Add(KeyCategory:=wdKeyCategoryCommand, Command:="dummy", KeyCode:=BuildKeyCode(wdKeyControl, wdKeyAlt, wdKeyQ))
只有内置命令支持传递命令参数。对于“普通”宏,这是不可能的 从逻辑上看问题时,按下应用字号8的组合键是静态的-它将始终应用字号8,而不是其他任何东西。因此,按组合键运行自定义过程本身也是静态的-组合键应该如何处理可变输入?没有动态传递任何内容的工具
如果组合键调用的过程需要处理变量信息,则需要将其存储在某个位置,并且宏可以读取它。例如,这可能是书签中的文本或文档中的内容控件、文档
变量
或CustomXMLPart
中的节点的值,或外部存储在文件或注册表中的内容。或者让宏显示一个输入框
谢谢您的回答。关于动态变量,您是对的。但在我的例子中,我想传递静态信息,如“标题1”。甚至尺寸参数中的“8”也必须保存在某个地方。我用不同的静态参数调用相同的过程(sub)。解决方案是编写大量sub来封装不同的参数。它在工作,但感觉脏-干。@iki是的,就是这样。FWIW如果您只想应用一种样式,您可以为每种样式指定一个键绑定,而不是编写一个子元素来应用该样式…谢谢,我已经知道了。事情并不是那么简单。我需要为每个键绑定“应用样式并运行一些重复代码”。