在Excel工作簿中的字段之间自动制表

时间:2018-11-27 00:23:20

标签: excel vba excel-vba

我为excel工作表编写了以下VBA脚本,该脚本允许个人在excel单元格中键入文本,然后在他们按Enter键后自动跳转到数组中的下一个单元格。但是,这需要有人在每个单元格中键入一些内容,以便脚本将您带到下面数组中的下一个单元格,并且无法识别选项卡,只能输入。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim tabArray As Variant
    Dim i As Long
     tabArray = Array("B5", "C6", "D7", "E8")
       Application.ScreenUpdating = False
         For i = LBound(tabArray) To UBound(tabArray)
    If tabArray(i) = Target.Address(0, 0) Then
        If i = UBound(tabArray) Then
            Me.Range(tabArray(LBound(tabArray))).Select
        Else
            Me.Range(tabArray(i + 1)).Select
        End If
    End If
  Next i
   Application.ScreenUpdating = True
End Sub

如果他们想跳过给定的字段并前进而无需在单元格中键入任何内容,则我希望能够简单地让该人员单击选项卡或输入,但是不确定该逻辑会是什么样。任何指针都很棒

3 个答案:

答案 0 :(得分:3)

您还可以保护表并解锁输入单元格。

右键单击单元格,选择“格式化单元格”。 然后,转到“保护”选项卡,然后取消选中“锁定”。

一旦输入单元格被解锁,请转到“查看”功能区,然后单击“保护表”。取消选中“选择锁定的单元格”,它应该只允许您单击未锁定的单元格,并且可以反复按Tab键以转到下一个可用的单元格。

答案 1 :(得分:1)

按照@Basher的建议保护工作表并解锁数据输入单元可能是IMO更好的解决方案,但是这种工作方式可行。几个注意事项:

  1. 要“进入”标签序列,您需要选择一个数据输入单元格
  2. 要“突破”制表符序列(以便可以选择其他单元格),可以进行多单元格选择。

代码:

Dim lastCellAddress As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim tabArray As Variant
    Dim i As Long, addr, mCurr, indx, mPrev

    If Target.Cells.CountLarge = 1 Then

        tabArray = Array("B5", "C6", "D7", "E8")

        addr = Target.Address(False, False)
        mCurr = Application.Match(addr, tabArray, 0)

        If IsError(mCurr) Then 'current selection isn't a data entry cell
            If lastCellAddress <> "" Then
                'was user previously in a data entry cell?
                mPrev = Application.Match(lastCellAddress, tabArray, 0)
                If Not IsError(mPrev) Then
                    'mPrev is 1-based but tabArray is 0-based...
                    indx = IIf((mPrev - 1) < UBound(tabArray), mPrev, 0)
                    On Error GoTo haveError
                    Application.EnableEvents = False
                    Me.Range(tabArray(indx)).Select '<< select the next entry cell
                    Application.EnableEvents = True
                End If
            End If
        End If
        lastCellAddress = Selection.Address(False, False)
    Else
        lastCellAddress = ""  'breaks out of the sequence
    End If
    Exit Sub

haveError:
    Debug.Print Err.Description
    Application.EnableEvents = True

End Sub

答案 2 :(得分:0)

您不需要VBA即可完成此任务-它是内置的Excel功能。

只需选择数据输入范围,然后在第一个单元格 TAB 中输入所需的值后,即可转到下一个突出显示的单元格-在当前单元格的右侧或在如果您位于该行的末尾,则显示下一行。