我想禁用Ctrl按钮的快捷方式,但是我发现Application.onkeyMethod
,但是我不知道该将它们放在哪里。
Application.onkey "^p",""
在工作簿打开事件中有效,但复制快捷方式,剪切等操作不会发生。
答案 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
您可以在立即窗口中看到被阻止的内容:
从理论上讲,您真的想遍历这些组合并清理所有不需要提高速度的内容-摆脱for循环,而只需遍历一大堆CTRL+
键您要阻止的组合。
如果您想完全发疯,则实际上可以安装一个低级钩子(这很荒谬),并且也可以阻止来自外部应用程序的CTRL。 (提示:请不要这样做。)