在 MS Access 中禁用 F11 键以防止打开导航窗格

Posted

技术标签:

【中文标题】在 MS Access 中禁用 F11 键以防止打开导航窗格【英文标题】:Disable F11 Key in MS Access to prevent opening the Navigation Pane 【发布时间】:2016-06-29 07:49:01 【问题描述】:

我有一个 MS Access 数据库。 Shift 键之前已被禁用,但当用户按下 F11 时,她/他可以看到导航窗格。 是否有锁定 F11 键以防止打开导航窗格的解决方案?

【问题讨论】:

【参考方案1】:

首先,这里的答案没有意义,因为如果您有 100 个表单和 100 个报告,那么您就有 200 个对象需要修改。 (这极大地浪费了开发人员的时间)。

更糟糕的是,如果显示报告,则表单没有焦点,当您按 F11 时再次看到导航窗格。

20 年来,Access 一直能够运行代码并针对任何 Fkey 或 alt 键的点击采取措施来运行宏 - 这些设置对应用程序来说是全局的。

因此,简单的解决方案是为应用程序制作一个自动键宏并包含 F11。因此,这将对应用程序 GLOBAL 起作用。

因此创建一个名为 autokeys 的新宏(不是模块)。宏将如下所示:

您可以在中设置功能键

您也可以将 ^ 用于控制键(这样您就可以创建一个全局打印键) 例如:^P

你可以使用 + 作为 shift 键,所以

+F11 将是您按下 shift F11 时运行的宏代码

+^P 将是 shift+ctrl P

在上面我们可以使用 F11 运行代码或做任何我们想做的事情,例如启动一个表单,但如上所示,我们只是将 F11 代码块内的操作代码留空。因此,这可用于让 F1 启动自定义访问“帮助”表单,或将任何 GLOBAL 的 alt 键重新映射到应用程序。

然后,您只需取消选中当前数据库启动设置中的显示导航窗格即可。当然,作为开发人员,您将在启动过程中按住 shift 键以防止启动代码和表单启动——这也绕过自动键宏并忽略您在当前数据库中“设置”的所有设置,例如隐藏导航窗格。因此,按住 shift 键,您可以使用 F11 显示、隐藏导航窗格,并且不让您的应用程序启动代码运行,这样您就可以作为开发人员工作。

【讨论】:

只是澄清一下,因为我花了一点时间才弄清楚您的解决方案:它之所以有效,是因为“AutoKeys”本身就是这里的关键字。如果您将 Submacro 命名为“AutoKeys”,它将查找 F11。天才!我对厨师的赞美。 我正面临@albert 提到的确切问题。虽然+^ 分别用于ShiftCtrl,但请告诉我Alt 的快捷键是什么? 不支持 alt 键 - 它们是为表单上的标签保留的,并且说 Te&st 将导致 alt-s 跳转到表单上的该标签,因此不支持 alt 键自动键宏。您可以在表单中设置 key preview = yes,然后在 key down 事件中,将返回 alt 键 (18) 代码。然后键值将作为键值返回。 (因此必须出现两个键 - 您必须跟踪序列。我认为您不应该真正尝试覆盖 alt 键(但在表单上使用 keydown 事件,这是可能的)。【参考方案2】:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
     Select Case KeyCode
          Case vbKeyF11
               KeyCode = 0
               MsgBox "F11 has been disabled.", vbOKOnly, "Disabled Key"
     End Select
End Sub

这也可以用其他键来完成。只需添加另一个选择案例语句。

如果您决定在未来进行更改,请确保您有办法显示导航窗格 - 否则您可能无法进行更改。

【讨论】:

您的解决方案是正确的,但如果重点是每个表单的不同表单,则必须添加此代码。我已经搜索并找到了更好的解决方案。 autokeys 宏适用于程序的所有部分。使用宏中定义的 F11 键并运行宏以显示消息,我解决了这个问题。谢谢你的帮助亲爱的朋友 我同意这并不能解决问题。如果您有 200 个表格,那么您必须修改所有表格。如果正在显示一个报告,那么你如何捕获 F11 - 正如指出的那样,自动键宏是正确的解决方案。【参考方案3】:

先尝试在谷歌上搜索您的问题。我能够找到多种解决方案。

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) 
  If KeyCode = vbKeyF11 Then KeyCode = 0 
End Sub 
'(you need to set the form's Key Preview to Yes)

或者试试

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  If KeyCode = vbKeyF11 Then
  MsgBox "F11 key is Disabled", vbCritical, "Error"
End If
End Sub

或者这个:

File -> Option -> Current DB -> Use Access special Keys (Uncheck)

参考:Disable F11 with VBA

【讨论】:

您的解决方案是正确的,但如果重点是每个表单的不同表单,则必须添加此代码。我已经搜索并找到了更好的解决方案。 autokeys 宏适用于程序的所有部分。使用宏中定义的 F11 键并运行宏以显示消息,我解决了这个问题。谢谢你的帮助亲爱的朋友【参考方案4】:

我认为此链接将提供您正在寻找的答案。

您要查找的功能可以在文件 --> 选项 --> 当前数据库 --> 取消选择“使用访问特殊键”下找到

这将阻止用户使用 F11 Alt+F11 等。

https://docs.microsoft.com/en-us/office/vba/access/concepts/miscellaneous/allowspecialkeys-property

用户仍然可以在打开数据库时按住 shift,然后授予对这些特殊键的访问权限。

【讨论】:

以上是关于在 MS Access 中禁用 F11 键以防止打开导航窗格的主要内容,如果未能解决你的问题,请参考以下文章

暂时禁用 MS Access 数据宏

Access 2007 拆分表单 VBA:打开时 acNewRec 可防止在表单中跳动 - 就像第一个字段未“选择”一样

我能否以编程方式启用和禁用存储在 SharePoint 中并链接到 ms-access 的 xlsx 文件的 ms-excel 文件共享/共同创作?

在压缩/修复期间防止自动编号重置 (MS Access)

如何防止最终用户在 MS Access 2010 应用程序中从前端查看后端数据?

无法在加载时禁用ms-access userform的所有字段