我在更改事件中使用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 种不同的方式触发:
- 回车键
- Tab 键
- 四个方向键
- 粘贴操作
没有简单的方法(没有键盘 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