Excel 在列中按Enter键时如何触发代码
每当在列“H”中按enter键时,我都会尝试移动到excel中列“A”下一行的第一个单元格。我的代码如下Excel 在列中按Enter键时如何触发代码,excel,vba,Excel,Vba,每当在列“H”中按enter键时,我都会尝试移动到excel中列“A”下一行的第一个单元格。我的代码如下 Private Sub move_to_next_row(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then ActiveCell.Offset(1, -7).Activate End If End Sub 工作表不存在按键关闭事件或类似事件。只能检查H列中的单元格是否已更改,然后移动到下
Private Sub move_to_next_row(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
ActiveCell.Offset(1, -7).Activate
End If
End Sub
工作表不存在按键关闭事件或类似事件。只能检查H列中的单元格是否已更改,然后移动到下一行的第一列
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Columns("H")) Is Nothing Then
Me.Cells(Target.Row + 1, "A").Select
End If
End Sub
在
此工作簿中
对象中放置以下内容
Private Sub Workbook_Open()
Application.OnKey "~", "move_to_next_row"
End Sub
然后使用F5运行
然后在一个正常的地方
Sub move_to_next_row()
Dim SelectRng As Range
On Error Resume Next
If ActiveCell.Column = 8 Then
Set SelectRng = ActiveCell.Offset(1, -7)
Else
If Application.MoveAfterReturn Then
Select Case Application.MoveAfterReturnDirection
Case xlToLeft
Set SelectRng = ActiveCell.Offset(0, -1)
Case xlToRight
Set SelectRng = ActiveCell.Offset(0, 1)
Case xlUp
Set SelectRng = ActiveCell.Offset(-1, 0)
Case xlDown
Set SelectRng = ActiveCell.Offset(1, 0)
End Select
End If
End If
On Error GoTo 0
If Not SelectRng Is Nothing Then
SelectRng.Activate
End If
End Sub
无论何时按enter键,都会调用“移动到下一行”。如果ActiveCell
位于列H
中,它会将ActiveCell
移动到列A
尝试此操作(也会由向下箭头触发)
不适用于积分 另一种方法是在H列中设置“回车”键的陷阱(无论用户是否在H列中进行了更改) 学分:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim wsName As String
wsName = ActiveSheet.Name
If ActiveCell.Column = 8 Then Application.OnKey "{Enter}", _
"'MoveCursor" & Chr(34) & wsName & Chr(34) & "'"
End Sub
将其放入模块中
Option Explicit
Sub MoveCursor(wsN As String)
If ActiveWorkbook.Name <> ThisWorkbook.Name Then GoTo CleanExit
If ActiveSheet.Name <> wsN Then GoTo CleanExit
Cells(ActiveCell.Row + 1, 1).Select
CleanExit:
'<~~ Reset the key to avoid undesirable sideeffects!
Application.OnKey "{Enter}"
End Sub
选项显式
子移动光标(wsN作为字符串)
如果是ActiveWorkbook.Name ThisWorkbook.Name,则转到CleanExit
如果是ActiveSheet.Name wsN,则转到CleanExit
单元格(ActiveCell.Row+1,1)。选择
清洁出口:
“如果H列包含公式怎么办?@LEO只有当H列中的常量值发生更改时,工作表才会触发更改
。如果公式的结果发生变化,它不会触发。有很多事情可能会出错,但这超出了问题的范围。您只能指明方向,但在一定程度上,您已经完成了您的部分:)顺便说一句,这将终止Enter键的正常行为(在H列以外的任何位置)@Pᴇʜ虽然不是一个很好的实现方法,但Enter键在我的测试中似乎仍然可以正常工作-已经在H列和其他列中进行了测试,因为在我的测试中,Application.OnKey“~”之后,“move_to_next_row”
Enter不再切换到我的工作表中的下一个单元格(只有H列按预期跳转)。如果我运行Application.OnKey“~”
它会再次工作。@Pᴇʜ啊,我明白你的意思-我在更新中已经处理过了。我以为你的意思不是calculating@SiddharthRout您可以使用Application.OnKey“{ENTER}”,“将_移动到_next_row”
来捕获该oneNice,但我认为它在使用多个工作簿时仍然存在故障。我还没有测试过它,但我认为如果你在该工作簿的H列中,并且换到另一个工作簿,它仍然会使用OnKey
,因此你必须添加workbook\u Deactivate
来取消输入,我想是吗?同一工作簿中的其他工作表也是如此(如果它只影响一个工作表)@Pᴇʜ:说得好。现在就试试吧,漂亮,看起来很完美。
Option Explicit
Sub MoveCursor(wsN As String)
If ActiveWorkbook.Name <> ThisWorkbook.Name Then GoTo CleanExit
If ActiveSheet.Name <> wsN Then GoTo CleanExit
Cells(ActiveCell.Row + 1, 1).Select
CleanExit:
'<~~ Reset the key to avoid undesirable sideeffects!
Application.OnKey "{Enter}"
End Sub