为何Application.OnKey无法为F1键(含组合键)分配快捷键?
无法通过Application.OnKey绑定F1(含组合键)到VBA过程
以下是测试代码:
Public Sub TestMe() Application.OnKey "^+{F1}", "RunMe" End Sub Public Sub RunMe() Debug.Print Now End Sub
问题说明:
似乎无法通过Application.OnKey方法将{F1}(单独或与修饰键组合)分配给VBA过程作为快捷键。
已尝试的操作:
- 单独使用F1,以及与各类修饰键组合的形式
- 在VBAProject>Module1和ThisWorkbook>Workbook_Open中分别定义私有和公有过程
- 以“Module.Procedure”的形式指定目标过程
- 将目标过程设置为私有和公有两种类型
将F1替换为F2或F3时可正常生效,但需要使用F1键,首选默认功能为“切换全屏”的Ctrl+Shift+F1组合键。
疑问:F1键是否已被微软设为保留键?
解答
是的,F1键(包括其组合键)属于Excel的系统级保留快捷键,默认绑定“帮助”功能,这类系统级快捷键无法通过Application.OnKey直接覆盖。
若要实现自定义绑定,可参考以下两种方案:
禁用Excel默认F1帮助功能
通过修改注册表禁用F1的默认帮助功能,之后即可用Application.OnKey绑定自定义过程。操作前建议备份注册表:
针对Excel 2016及以上版本,找到注册表项:HKEY_CURRENT_USER\Software\Microsoft\Office\<你的Excel版本号>\Excel\Options新建DWORD值,命名为
DisableHelpKey,将值设为1。重启Excel后,F1默认功能失效,即可绑定自定义过程。工作表级按键捕获
若不需要全局生效,可在目标工作表的KeyDown事件中捕获按键:Private Sub Worksheet_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) ' 捕获Ctrl+Shift+F1组合键 If Shift = 3 And KeyCode = vbKeyF1 Then RunMe KeyCode = 0 ' 阻止默认功能触发 End If End Sub此方式无需修改注册表,但仅在该工作表激活时生效。
内容的提问来源于stack exchange,提问作者Steve R.
相关产品推荐
相关产品推荐

