为运行过程分配键盘快捷方式

43
当我在VBA编辑器中按下F5时,我总是希望运行我的“Sub Skynet()”过程。是否有办法为此过程分配键盘快捷方式?
9个回答

39
根据Microsoft的文档,执行以下步骤来为宏分配快捷键:
  1. 在“工具”菜单上,将鼠标指向“宏”,然后单击“宏”。

  2. 在“宏名称”框中输入要分配键盘快捷方式的宏名称。

  3. 单击“选项”。

  4. 如果您想通过按键盘快捷键来运行宏,请在“快捷键”框内输入一个字母。可以使用CTRL+字母(小写字母)或CTRL+SHIFT+字母(大写字母),其中字母是键盘上的任何字母键。快捷键不能使用数字或特殊字符,例如@#

    注意:当包含宏的工作簿打开时,快捷键将覆盖任何等效的默认Microsoft Excel快捷键。

  5. 如果要包括有关宏的说明,请在“说明”框中输入说明。

  6. 单击“确定”。

  7. 单击“取消”。


3
作为一个旁注,@user1283776,在同时使用ShiftApplication.Workbooks.Open(path)时要小心,因为似乎存在已知的 bug 会导致 VB 脚本卡住。详见:https://dev59.com/xnPYa4cB1Zd3GeqPpPWO - ForceMagic
我稍微不同意第四点。我可以使用CTRL + #和CTRL+(0-9)来至少通过代码进行设置。但是我现在遇到了一些ALT+(0-9)的问题。 - Jan
4
似乎从VBE不再可能实现这一点。我是通过功能区完成的:开发人员->宏->您的宏名称->选项。那样似乎可以。 - DukeSilver
DuleSilver的评论似乎是Excel 365中的答案(至少在2019年末)。 - Simon Elms

35

你可以使用以下代码将键盘按键分配给工作表上的按钮,只需将此代码复制到包含该按钮的工作表中。

这里的 Return 指定了按键,get_detail 是过程名称。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Application.OnKey "{RETURN}", "get_detail"

End Sub

现在,在这张表格中,每当您按下Enter键时,将调用分配的宏。


2
此答案提供更多的灵活性。 - kevinarpe
5
或许将这段代码分配给“Workbook_open”事件会更好。 - kolcinx
2
通过结合OnKeyWorkbook_Open,我能够创建一个在每台机器上都能正常工作的组合。 - ZygD
1
此内容的文档可以在此处找到:https://msdn.microsoft.com/zh-cn/library/office/ff197461.aspx - rbyrne
1
如果你使用的是Application.OnKey "^R"而不是"^r",那么当你想要使用CTRL+R的快捷方式时,你必须使用Shift键。这是一个需要注意的问题。 - Joe Stellato
有没有办法在第二个字符串中指定模块名称?我有时会有相同名称但不同模块的宏,我想为不同的快捷键区分它们。 - Louie Lee

4
以下是如何在Word 2013中为自定义宏分配键盘快捷键的方法。
情境是您创建了一个名为“fred”的宏,并希望通过键入Ctrl+f来执行该宏。
1. 单击“文件”,然后单击“选项”。 2. 单击“自定义功能区”(从我的角度来看,这是一个不太直观的步骤)。 3. 单击“键盘快捷键:自定义”按钮。 4. 在类别列表框中向下滚动到底部,然后选择“宏”。 5. 现在,宏列表框应显示自定义宏列表。选择“fred”。 6. 单击“按新快捷键”文本框使其处于活动状态。 7. 键入Ctrl+f。这应该出现在文本框中。 8. 查看“当前键”列表框。在这种情况下,它显示“当前分配给NavPaneSearch”。 9. 如果您不介意覆盖默认设置,请单击左下方的“分配”按钮,将“Ctrl+f”分配为运行您的“fred”宏。 默认情况下,分配保存在Normal.dotm文档模板中。如果此键盘分配对此文档是唯一的,则可能希望将“保存更改”下拉列表更改为文档名称。

2
  1. 点击“键盘快捷键:自定义”按钮。
我的对话框中没有这个选项。
- Fueled By Coffee

3

F5是在VBA编辑器中运行宏的标准快捷键。我认为您无法在编辑器本身中添加快捷键。如果您想从Excel运行宏,可以从那里分配快捷键。

在Excel中按下Alt + F8打开宏对话框。选择要分配快捷键的宏,然后单击“选项”。在那里,您可以将快捷方式分配给该宏。


2

功能键(F1F2F3F4F5等)可以使用以下代码分配给宏:

Sub A_1()
    Call sndPlaySound32(ThisWorkbook.Path & "\a1.wav", 0)
End Sub

Sub B_1()
    Call sndPlaySound32(ThisWorkbook.Path & "\b1.wav", 0)
End Sub

Sub C_1()
    Call sndPlaySound32(ThisWorkbook.Path & "\c1.wav", 0)
End Sub

Sub D_1()
    Call sndPlaySound32(ThisWorkbook.Path & "\d1.wav", 0)
End Sub

Sub E_1()
    Call sndPlaySound32(ThisWorkbook.Path & "\e1.wav", 0)
End Sub


Sub auto_open()
    Application.OnKey "{F1}", "A_1"
    Application.OnKey "{F2}", "B_1"
    Application.OnKey "{F3}", "C_1"
    Application.OnKey "{F4}", "D_1"
    Application.OnKey "{F5}", "E_1"
End Sub

在另一个模板中,我们使用Ctrl+F1键打开了用户窗体,以剪切和移动所选行:

Sub Auto_Open()
Application.OnKey "^{F1}", "Show"
End Sub
Sub Show()
Cut_Row.Show
End Sub

在Excel中剪切行并上下移动

来源


1
您可以在VBA编辑器环境中添加一些ALT +字母快捷键。我添加了ALT + C以注释所选文本行,A + X以取消选定的文本行:
  1. 在VBE中,右键单击工具栏,然后选择“自定义”
  2. 可选地创建新工具栏
  3. 选择命令选项卡并在类别列表框中选择“编辑”。 在命令列表框中找到“Comment Block”。 单击并将其拖动到目标工具栏。 单击左键打开上下文弹出菜单,然后选择“图像和文本”。 用&C替换名称。
  4. 重复步骤3,对于Uncomment Block命令,请将名称替换为&X。
  5. 关闭自定义弹出窗口。
有一些内置的Alt + Letter命令不能用于使用字母的新快捷方式:A,D,E,D,H,I,O,Q,R,T,V,W。

0
编写一个类似以下 VBA 过程的程序:
Sub E_1()
    Call sndPlaySound32(ThisWorkbook.Path & "\e1.wav", 0)
    Range("AG" & (ActiveCell.Row)).Select 'go to column AG in the same row
End Sub

然后进入开发人员选项卡,宏,选择宏,点击选项,然后添加快捷键或按钮。


0

我也曾遇到过这个问题。我唯一的解决方案是先在 Excel 工作簿中记录宏,然后将模块从打开的工作簿中拖放到“插件模块”中。这将是上面模块的一个副本,但你为其分配的键盘快捷键将幸好保留。

我只是记录了一个无用的宏,然后将其移入其中,最后再将真实模块的代码复制进去。

终于找到了解决方法,感觉太棒了,我必须回复那些五年前发表的帖子!!!


0
我遇到的问题是,我希望将快捷键与一个没有可见界面的 xlam 中的宏相关联。我发现以下方法可行:
要将快捷键与宏相关联:
在 Excel(不是 VBA)中,在“开发人员”选项卡上单击“宏”- 不会显示任何宏 输入子程序的名称 然后“选项”按钮将启用 单击它 Ctrl 将是默认值 按住 Shift 键并按下所需字母 例如 Shift 和 A 将使 Ctrl-Shift-A 与该子过程相关联

(1) 使用句号。如果您要将“Click”和“Ctrl”等“关键”单词大写,那么请阅读文本的这一部分:“然后应启用选项按钮单击它Ctrl将是默认值”。即,大写并不表示前面的句子以“隐含的句号”结束。 (2) 这并没有回答原始问题。 - DSlomer64

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接