编码回车键

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