编码回车键
Coding the Enter Key
我是 excel 宏编辑的新手。我的传播 sheet 是根据输入的团队分数。我有 4 列。 A 列和 C 列是团队编号,B 列和 D 列是他们的分数。所以我想这样做,当在单元格 B2 中按回车键而不是向下到 B3 时,它会向右移动两个,到 D2。去D2之后,去B3。我有 4 排队伍,所以一直到 D6。我尝试使用宏,但没有成功。
那是我尝试过的方法,但没有用。当使用 Visual Basic 代码按回车键进入 select 单元格时,我需要某种自动化方式。
只需 double-click sheet 您想要在 Microsoft Excel 对象下在 Visual Basic 编辑器中展示此行为以打开附加到该工作集的代码模块:
并添加此代码。 “option explicit”指令是可选的。
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Column
Case 2: Target.Offset(0, 2).Select
Case 4: Target.Offset(1, -2).Select
End Select
End Sub
你没有回答我的澄清问题... 如果按回车的单元格已被修改,代码很简单。您已经收到处理此假设的答案。现在,如果您需要 所需的行为而不修改单元格 ,请复制活动 sheet 代码模块中的下一个事件(右键单击 sheet 名称并选择 'View Code'):
Option Explicit
Private prevAddress As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lastRow As Long, rngScore As Range, prCell As Range
If Target.cells.CountLarge > 1 Then Exit Sub
If prevAddress = "" Then
If Target.Column = 2 Or Target.Column = 4 Then
prevAddress = Target.Address: Exit Sub
End If
End If
lastRow = Me.Range("A" & Me.rows.count).End(xlUp).row
Set rngScore = Union(Me.Range("B2:B" & lastRow + 1), Me.Range("D2:D" & lastRow + 1))
If Not Intersect(Target, rngScore) Is Nothing Then
Application.EnableEvents = False
If Target.Column = 2 Then
If Target.Address = "$B" And prevAddress <> "D" & lastRow Then 'for CLICKING in B2
prevAddress = "$B"
Application.EnableEvents = True: Exit Sub
End If
If Target.Address = "$B" And (prevAddress = "$B" Or prevAddress = "$D$" & lastRow) Then
Target.Offset(-1, 2).Select: prevAddress = Target.Offset(-1, 2).Address
ElseIf prevAddress = Target.Offset(-1).Address Or _
Target.Offset(-2, 2).Address = prevAddress Then
Target.Offset(-1, 2).Select: prevAddress = Target.Offset(-1, 2).Address
Else
prevAddress = Target.Address
End If
Else 'for column 4:
If Target.row = lastRow + 1 Then 'for the case of the last cell in the accepted range
Me.Range("B2").Select
Else
If prevAddress = Target.Offset(-1).Address Then
Target.Offset(0, -2).Select: prevAddress = Target.Offset(0, -2).Address
Else
prevAddress = Target.Address
End If
End If
End If
Application.EnableEvents = True
End If
End Sub
我是 excel 宏编辑的新手。我的传播 sheet 是根据输入的团队分数。我有 4 列。 A 列和 C 列是团队编号,B 列和 D 列是他们的分数。所以我想这样做,当在单元格 B2 中按回车键而不是向下到 B3 时,它会向右移动两个,到 D2。去D2之后,去B3。我有 4 排队伍,所以一直到 D6。我尝试使用宏,但没有成功。
那是我尝试过的方法,但没有用。当使用 Visual Basic 代码按回车键进入 select 单元格时,我需要某种自动化方式。
只需 double-click sheet 您想要在 Microsoft Excel 对象下在 Visual Basic 编辑器中展示此行为以打开附加到该工作集的代码模块:
并添加此代码。 “option explicit”指令是可选的。
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Column
Case 2: Target.Offset(0, 2).Select
Case 4: Target.Offset(1, -2).Select
End Select
End Sub
你没有回答我的澄清问题... 如果按回车的单元格已被修改,代码很简单。您已经收到处理此假设的答案。现在,如果您需要 所需的行为而不修改单元格 ,请复制活动 sheet 代码模块中的下一个事件(右键单击 sheet 名称并选择 'View Code'):
Option Explicit
Private prevAddress As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lastRow As Long, rngScore As Range, prCell As Range
If Target.cells.CountLarge > 1 Then Exit Sub
If prevAddress = "" Then
If Target.Column = 2 Or Target.Column = 4 Then
prevAddress = Target.Address: Exit Sub
End If
End If
lastRow = Me.Range("A" & Me.rows.count).End(xlUp).row
Set rngScore = Union(Me.Range("B2:B" & lastRow + 1), Me.Range("D2:D" & lastRow + 1))
If Not Intersect(Target, rngScore) Is Nothing Then
Application.EnableEvents = False
If Target.Column = 2 Then
If Target.Address = "$B" And prevAddress <> "D" & lastRow Then 'for CLICKING in B2
prevAddress = "$B"
Application.EnableEvents = True: Exit Sub
End If
If Target.Address = "$B" And (prevAddress = "$B" Or prevAddress = "$D$" & lastRow) Then
Target.Offset(-1, 2).Select: prevAddress = Target.Offset(-1, 2).Address
ElseIf prevAddress = Target.Offset(-1).Address Or _
Target.Offset(-2, 2).Address = prevAddress Then
Target.Offset(-1, 2).Select: prevAddress = Target.Offset(-1, 2).Address
Else
prevAddress = Target.Address
End If
Else 'for column 4:
If Target.row = lastRow + 1 Then 'for the case of the last cell in the accepted range
Me.Range("B2").Select
Else
If prevAddress = Target.Offset(-1).Address Then
Target.Offset(0, -2).Select: prevAddress = Target.Offset(0, -2).Address
Else
prevAddress = Target.Address
End If
End If
End If
Application.EnableEvents = True
End If
End Sub