Excel VBA:如何在应用程序撤消后的更改事件中记录用户按键



我在更改事件中使用Application.Undo来记录更改单元格的先前值,并用新值重新分配该单元格。

    Application.EnableEvents = False
    vNew = Target.Value
    On Error Resume Next
    Application.Undo
    vOld = Target.Value
    Target.Value = vNew
    Application.EnableEvents = True

由于该分配,活动单元格始终是目标单元格,用户按下的最后一个键转到下一个单元格(Enter 或向右箭头(需要使用两次才能实际转到下一个单元格。

有没有办法记录该按键,以便我可以在代码中强制它?

用户需要更改连续行/列中的多个单元格,这有点烦人。

问题是更改事件至少可以通过 7 种不同的方式触发:

  1. 回车
  2. Tab
  3. 四个方向键
  4. 粘贴操作

没有简单的方法(没有键盘 API(来捕获用户使用的那个。 我建议你控制并强制解决问题:

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
        vNew = Target.Value
        On Error Resume Next
        Application.Undo
        vOld = Target.Value
        Target.Value = vNew
        Target.Offset(1, 0).Select
    Application.EnableEvents = True
End Sub

这对你有用吗?没有 application.undo 和 .onkey:

Public vOld As Variant 'these 2 in a module
Public vOld2 As Variant
Private Sub Worksheet_Change(ByVal Target As Range)
    vOld2 = vOld
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    vOld = Target.Value
End Sub

最新更新