Попробуйте это - Вы можете поместить это в 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 из внешних приложений тоже.( Подсказка: не делайте этого. )
https://www.codeguru.com/vb/gen/vb_system/keyboard/article.php/c4829/Managing-LowLevel-Keyboard-Hooks-with-the-Windows-API.htm