在Excel工作簿中的字段之间自动切换选项卡



Excel工作表的以下VBA脚本允许个人在单元格中键入文本,然后在按下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

如果他们想跳过给定的字段,在不在单元格中键入任何内容的情况下前进,我想让他们点击选项卡或输入。

您也可以只保护工作表并解锁输入单元格。

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

输入单元格解锁后,转到"审阅"功能区,然后单击"保护工作表"。取消选中"选择锁定的单元格",它应该只允许您单击未锁定的单元格,并可以重复按Tab键转到下一个可用的单元格。

按照@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

您不需要VBA来完成此任务,它是一个内置的Excel功能。

只需选择您的数据输入范围,在将所需值输入到第一个单元格后,点击TAB,它将带您进入下一个高亮显示的单元格-位于当前单元格的右侧,或者位于下一行(如果您在该行的末尾(。

最新更新