1

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

Excel 跟踪按键

因此,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。究竟是什么导致了这个错误,是否可以避免呢?

4

1 回答 1

0

问题似乎源于这样一个事实,即当您处于“编辑模式”(即编辑单元格中的值)时,Excel 会锁定工作表以防止更改,直到您通过按 Enter 或 Escape 退出编辑模式。

因此,在您的场景中,看起来当您第一次按下某个键时,它会很好地注册并触发您Sheet_KeypressWorksheets(1).Range("G" & 4 & ":G" & 6).Value. 尽管如此,Excel 仍然会记录按键,例如,如果您将例程的最后一行更改为类似Application.StatusBar = Col.

至于解决这个问题的方法,您需要编写代码,使其在按键后立即将 Excel 退出“编辑模式”。不幸的是,没有内置的方法可以做到这一点,人们想出了各种方法来做到这一点(例如这里

有一个更简单的解决方案,但是有几个注意事项:输入的值不会显示在 Excel 工作表中,并且您只能在公式更新之前输入单个值(因此对 > 列没有好处AA)。

您可以做的是将该行Cancel = True放入上面的子程序中,这将防止按键进入 Excel 并因此激活编辑模式。

于 2013-08-20T13:57:54.413 回答