Excel VBA:如何在application.undo之后记录更改事件中的用户按键?
我正在使用更改事件中的Excel VBA:如何在application.undo之后记录更改事件中的用户按键?,excel,vba,Excel,Vba,我正在使用更改事件中的应用程序。撤消,以记录更改单元格的上一个值,并用新值重新分配该单元格 Application.EnableEvents = False vNew = Target.Value On Error Resume Next Application.Undo vOld = Target.Value Target.Value = vNew Application.EnableEvents = True 由于该分配,活动单元格始
应用程序。撤消
,以记录更改单元格的上一个值,并用新值重新分配该单元格
Application.EnableEvents = False
vNew = Target.Value
On Error Resume Next
Application.Undo
vOld = Target.Value
Target.Value = vNew
Application.EnableEvents = True
由于该分配,活动单元格始终是该目标单元格,用户为进入下一个单元格而按下的最后一个键(回车或向右箭头)需要使用两次才能真正进入下一个单元格
有没有一种方法可以记录下按键,这样我就可以在代码中强制它
用户需要更改连续行/列中的多个单元格,这有点烦人。问题是更改事件至少可以通过7种不同的方式触发:
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
问题在于,变更事件至少可以通过7种不同的方式触发:
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
这对你有用吗?不使用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
是否希望onkey事件触发宏?你看了吗?我已经试过在上面代码的最后一行之后使用
Application.OnKey
。但它不会检测到按键,因此它不会进入手动强制输入的过程。您希望在“工作簿.open”或“工作表.activate”下进行初始化,或以其他方式在按键后随时调用您的过程。不在需要调用的实际过程的最后一行。还是我看错了你的问题?你想让onkey事件触发一个宏?你看了吗?我已经试过在上面代码的最后一行之后使用Application.OnKey
。但它不会检测到按键,因此它不会进入手动强制输入的过程。您希望在“工作簿.open”或“工作表.activate”下进行初始化,或以其他方式在按键后随时调用您的过程。不在需要调用的实际过程的最后一行。还是我看错了你的问题?谢谢,我对SendKeys“{ENTER}”做了同样的事情,但我想我也可以用这个。我只是想知道是否有一种方法可以捕捉用户按下的键,但我明白你的意思,我不得不将就一下。谢谢,我用SendKeys“{ENTER}”
做了同样的事情,但我想我也可以用它。我只是想知道是否有一种方法可以捕捉到用户按下的按钮,但我明白你的意思,我不得不将就一下。