如何包装Excel光标以使其保持在特定范围内

时间:2012-07-06 17:17:03

标签: excel vba excel-vba

在Excel中,我有三列:

column1, column2, column3

我使用连接到IPAD的条形码扫描仪将数据输入excel。条形码扫描器在每次扫描后发送ENTER。我相信我可以设置excel,以便ENTER会导致选择下一列(而不是下一行)

但是,在ENTER中检测到column3后,我不知道如何将其转到下一行。现在我有这个:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Column = 3 Then
        If Target.Value = "{enter}" Then
            MsgBox "SDf"
        End If
    End If
End Sub

但是Target.Value只检测单元格内的字符串,它不会检测到已按下的内容。

如何在ENTER中检测到column 3之后选择下一行?

2 个答案:

答案 0 :(得分:10)

您不需要vba代码。

最简单的方法是解锁这三列中的单元格并锁定其余单元格。完成后,保护整张纸。但是,在保护时,请确保取消选中名为Select Locked Cells的选项。黄色柱子没有受到保护。

enter image description here

下一步是设置excel,以便在输入数据并按下Enter键后,光标移动到下一列。您可以从File TAB | Options | Excel Options | Advanced

执行此操作(在Excel 2010中说)

enter image description here

当光标到达最后一列并输入数据并按下输入时,光标将自动移动到下一行。见快照。

enter image description here

HTH

答案 1 :(得分:4)

除了Siddharth的出色建议,这里还有基于事件的方法:

Private Sub Worksheet_Change(ByVal Target As Range)

    'named (contiguous) range on input sheet
    Const DATA_NAME As String = "DATA"
    Dim rngData As Range, numCols As Long

    If Target.Cells.Count > 1 Then Exit Sub

    Set rngData = Me.Range(DATA_NAME)
    numCols = rngData.Columns.Count

    If Not Intersect(rngData, Target) Is Nothing Then
        If Target.Column < rngData.Columns(numCols).Column Then
            Target.Offset(0, 1).Select
        Else
            Target.Offset(1, -(numCols - 1)).Select
        End If
    End If

End Sub