正如评论中所说,Application.Onkey
当您处于编辑模式时,不应对按键行为产生任何影响,因此这告诉我这可能是 Excel/VBA 的错误。
这可能是由于您设置了很多OnKey
目标,它会导致一些处理按键的进程表现不稳定,甚至有时会挂起。
可以尝试的一件事是减少您设置的组合键数量。您正在尝试设置1,785(7 x 255)OnKey
仅在第一个循环中的目标!
如果您的目标是针对键盘快捷键,那么您当然可以将字符范围从 32 减少到 255,因为我真的怀疑您的键盘是否可以输出不可打印的 ASCII 字符 https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/chr-function#:%7E:text=Numbers%20from%200%E2%80%9331%20are%20the%20same%20as%20standard%2C%20nonprintable%20ASCII%20codes。您甚至可以考虑将其减少到 32 到 127,具体取决于键盘上是否有重音字符。
如果这还不足以解决问题,您可以尝试重置Application.OnKey
组合恢复到原始状态,然后重新禁用所有快捷方式,看看是否可以正确重置。
例如,您可以对过程进行修改版本,该版本利用传递Application.OnKey "...", Null
将重置所传递的键的行为:
Sub ShortCutKeysToggle(Enabled As Boolean)
Dim Proc As Variant
If Enabled Then
Proc = Null
Else
Proc = ""
End If
ShortCutKeysInitializeVariables
' Combinations
For Each Key In KeyArray
For i = 32 To 255
On Error Resume Next
Application.OnKey Key & Chr(i), Proc
Next i
Next Key
' Functions keys
For i = 1 To 12
On Error Resume Next
Application.OnKey "{F" & i & "}", Proc
Next i
' Combinations & Functions keys
For Each Key In KeyArray
For i = 1 To 12
On Error Resume Next
Application.OnKey Key & "{F" & i & "}", Proc
Next i
Next Key
End Sub
然后,当您遇到错误时,您可以通过以下过程来切换或重置按键。
Sub ShortCutKeysEnable()
ShortCutKeysToggle True
End Sub
Sub ShortCutKeysDisable()
ShortCutKeysToggle False
End Sub
Sub ShortCutKeysReset()
ShortCutKeysToggle True
ShortCutKeysToggle False
End Sub
UPDATE:以下部分现在无关紧要,因为它不是关闭并重新打开文件来解决问题,而是关闭并重新打开 Excel 应用程序。
如果这不起作用,您提到关闭和打开文件解决了问题,因此您始终可以使用一个宏来关闭文件并重新打开它。
Sub CloseAndReopenActiveWorkbook()
Application.ScreenUpdating = False
Dim FileName As String
FileName = ActiveWorkbook.FullName
ActiveWorkbook.Close SaveChanges:=True
Workbooks.Open FileName:=FileName
Application.ScreenUpdating = True
End Sub