按键上的Excel VBA复制单元格

时间:2013-08-20 04:21:21

标签: vba excel-vba excel

我正在使用VBA动态更改工作表,同时键入另一个单元格。为此,我一直在使用此处的API代码:

Excel track keypresses

因此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.究竟是什么导致了这个错误并且可以避免它?

1 个答案:

答案 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,从而激活编辑模式。