Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 使用CommandParameter添加KeyBindings以调用sub()_Vba_Parameters_Ms Word_Key Bindings - Fatal编程技术网

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如果您只想应用一种样式,您可以为每种样式指定一个键绑定,而不是编写一个子元素来应用该样式…谢谢,我已经知道了。事情并不是那么简单。我需要为每个键绑定“应用样式并运行一些重复代码”。