ACCESS窗体的内置组合键与用户编写的键盘事件冲突,怎样解决

何尧 365 信誉分
2026-06-11T13:28:11.86+00:00

1.如果自己编写的窗体键盘事件所用的组合键与ACCESS内置组合键冲突,ACCESS会先执行内置功能,再执行用户编写的事件。

2.ACCESS内置组合键已经占用了大部分的键,可以说五花八门,不太可能另建新的能让用户容易理解且简单的组合键。

所以问题是:怎样显式地禁用掉指定的ACCESS内置组合键,但是未显式禁用的ACCESS内置组合键依然可用。例如保留Ctrl+C/V/X/F 这些常用组合键,禁止 Ctrl+上/下/左/右 的组合键而另行编写。

Microsoft 365 和 Office | Access | 家庭版 | Windows
0 个注释 无注释

问题作者接受的答案

Gabriel-N 19,370 信誉分 Microsoft 外部员工 审查方
2026-06-11T14:58:50.7066667+00:00

注:此回复已自动翻译。因此,它可能包含语法错误或表达尴尬。

你好 @何尧

我明白你想在 Access 表单中通过覆盖特定的内置组合键(比如 Ctrl + 方向键)来定制键盘快捷键,同时保持标准组合键(比如 Ctrl + C、V 或 F)不变。

要实现这一点,你需要在 MS Access 处理键盘输入之前,在表单级别拦截按键。首先,在设计视图中打开你的表单。在属性表的“事件”选项卡下,将“键盘预览”属性设置为“是”。这一步很关键,因为它允许表单在控件响应前捕捉键盘事件。

在同一个选项卡中,找到“按键按下”属性,选择[事件过程],然后打开 VBA 编辑器。你可以利用这个事件来评估并管理输入的按键。

下面是一个例子,当按下 Ctrl + 上箭头时,会打开一个特定表单,而不是触发默认的 Access 操作:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Dim isCtrlDown As Boolean
    isCtrlDown = (Shift And acCtrlMask) > 0

    If isCtrlDown Then
        Select Case KeyCode
            Case vbKeyUp
                ' Execute your custom logic here
                DoCmd.OpenForm "Form_1"
                
                ' Suppress the default Access action
                KeyCode = 0
                
        End Select
    End If
End Sub

我们使用按位操作 (Shift And acCtrlMask) > 0 来可靠地检测 Ctrl 键是否被按下。

最重要的部分是在执行你的自定义逻辑后将 KeyCode = 0。这实际上清除了按键缓冲区。Access 会将其解释为没有按键被按下,从而防止与该快捷键相关的原生行为。

因为我们只在 Select Case 语句中指定你的目标键(比如 vbKeyUp),所以像 Ctrl + C 或 Ctrl + F 这样的标准按键组合会简单地绕过 KeyCode = 0 命令。因此,它们的默认功能保持完全不变。

请试试看,然后告诉我结果。


注意:如果您希望收到本帖相关的邮件通知,请按照我们文档中的步骤启用电子邮件通知。

此答案是否有帮助?

1 个人认为此答案很有帮助。

0 个其他答案

排序依据: 非常有帮助

你的答案

提问者可以将答案标记为“已接受”,审查方可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。