我正在使用VBA动态更改工作表,同时键入另一个单元格。为此,我一直在使用此处的API代码:
因此Sub Sheet_Keypress
描述了按键时所需的操作。
但是,我遇到了以下问题:
Private Sub Sheet_KeyPress(ByVal KeyAscii As Integer, _
ByVal KeyCode As Integer, _
ByVal Target As Range, _
Cancel As Boolean)
Dim Col As String
Col = Chr(KeyAscii)
Worksheets(1).Range("G" & 4 & ":G" & 6).Value = _
Worksheets(1).Range(Col & 1 & ":" & Col & 3).Value
End Sub
当我回到工作表并键入不在第1-3行的某个地方时,第一个按键就可以了。但是,没有记录第二个按键,另一个键给出错误1004.究竟是什么导致了这个错误并且可以避免它?
答案 0 :(得分:0)
问题似乎源于这样一个事实:当您处于“编辑模式”(即编辑单元格中的值)时,Excel会锁定工作表,直到您按Enter或Escape退出编辑模式为止。
因此,在您的方案中,看起来当您第一次按下某个键时,它会被正常注册并触发您的Sheet_Keypress
,但是,在此之后,Excel立即进入“编辑模式”,然后您的后续调用Worksheets(1).Range("G" & 4 & ":G" & 6).Value
因Excel锁定工作表而失败。尽管如此,Excel仍会注册按键,如果您将例程的最后一行更改为Application.StatusBar = Col
,则可以看到这一点。
至于解决这个问题的方法,您需要编写代码,以便在按下按键后将Excel踢出“编辑模式”。不幸的是,没有内置的方法可以做到这一点,人们已经提出了各种方法来做到这一点(例如here)
有一个更简单的解决方案,但有一些注意事项:输入的值不会显示在Excel工作表中,并且您只能在更新公式之前键入单个值(所以没有好处对于>列AA)。
您可以做的是将行Cancel = True
放入上面的子行中,这样可以防止按键进入Excel,从而激活编辑模式。