放置application.onkey的事件

时间:2018-11-28 23:07:40

标签: excel vba

我想禁用Ctrl按钮的快捷方式,但是我发现Application.onkeyMethod,但是我不知道该将它们放在哪里。

Application.onkey "^p",""在工作簿打开事件中有效,但复制快捷方式,剪切等操作不会发生。

1 个答案:

答案 0 :(得分:2)

尝试-您可以将其放在ThisWorkbook对象中。

只需将整个内容粘贴进去。

这将(几乎)遍历每个键并通过控制阻止键的组合。

这不会让您打开帮助菜单(CTRL + F1),它不会让您选择所有单元格(CTRL + A)-它不会使您(最多)执行任何操作控制键。

值得注意的是,此不会阻止CTRL+SHIFT+DOWN之类的东西-仅阻止CTRL+A之类的东西。

如果您愿意的话,添加该功能相对来说是微不足道的-您只需为"^+""^%""^+%"添加额外的BlockKey请求-这样。

编辑:写完这些之后,我在这里https://www.rondebruin.nl/win/s4/win012.htm

的其他人那里找到了类似的代码。
Private Sub Workbook_Open()
'Call DisableControlKey '<- Use this in production
Call DisableControlKey(True) 'True means show in debug window what was blocked -
End Sub

Sub DisableControlKey(Optional ShowInDebug As Boolean = False)
Dim Arr(), x
Arr = Array("{BS}", "{BREAK}", "{CAPSLOCK}", "{CLEAR}", "{DEL}", "{DOWN}", "{END}", _
            "{ENTER}", "~", "{ESC}", "{HELP}", "{HOME}", "{INSERT}", "{LEFT}", "{NUMLOCK}", _
            "{PGDN}", "{PGUP}", "{RETURN}", "{RIGHT}", "{SCROLLLOCK}", "{TAB}", "{UP}")
'Block all ascii characters from 0 to 127
For x = 0 To 127
    If ShowInDebug Then
        Debug.Print Chr(x) & ": " & BlockKey("^" & Chr(x))
    Else
        BlockKey ("^" & Chr(x))
    End If
Next x
'Block all keys on this list: https://docs.microsoft.com/en-us/office/vba/api/excel.application.onkey
For x = LBound(Arr) To UBound(Arr)
    If ShowInDebug Then
        Debug.Print Arr(x) & ": " & BlockKey("^" & Arr(x))
    Else
        BlockKey ("^" & Chr(x))
    End If
Next x
'Block all function keys
For x = 1 To 15
    If ShowInDebug Then
        Debug.Print "F" & x & ": " & BlockKey("^" & "{F" & x & "}")
    Else
        BlockKey ("^" & "{F" & x & "}")
    End If
Next x
End Sub
Function BlockKey(KeyCombo As String) As Boolean
On Error Resume Next
Application.OnKey KeyCombo, ""
BlockKey = (Err.Number = 0)
On Error GoTo 0
End Function

您可以在立即窗口中看到被阻止的内容:

Output

从理论上讲,您真的想遍历这些组合并清理所有不需要提高速度的内容-摆脱for循环,而只需遍历一大堆CTRL+键您要阻止的组合。

如果您想完全发疯,则实际上可以安装一个低级钩子(这很荒谬),并且也可以阻止来自外部应用程序的CTRL。 (提示:请不要这样做。

https://www.codeguru.com/vb/gen/vb_system/keyboard/article.php/c4829/Managing-LowLevel-Keyboard-Hooks-with-the-Windows-API.htm