Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel工作簿中字段之间的自动选项卡_Excel_Vba - Fatal编程技术网

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

Excel工作簿中字段之间的自动选项卡,excel,vba,Excel,Vba,以下Excel工作表的VBA脚本允许个人在单元格中键入文本,然后在按enter键后自动跳转到数组中的下一个单元格 但是,这需要有人在每个单元格中键入脚本才能前进到下面数组中的下一个单元格,并且不识别选项卡,只输入 Private Sub Worksheet_Change(ByVal Target As Range) Dim tabArray As Variant Dim i As Long tabArray = Array("B5", "C6

以下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或enter键。

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


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

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


只需选择您的数据输入范围,将所需值输入第一个单元格命中选项卡后,它将带您进入下一个高亮显示的单元格-当前单元格的右侧或下一行(如果您位于行的末尾)。

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

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


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

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

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


解锁输入单元格后,转到“审阅”功能区,然后单击“保护工作表”。取消选中“Select locked cells”(选择锁定的单元格),它应该只允许您单击已解锁的单元格,并且可以反复按Tab键转到下一个可用的单元格。

按照@Basher的建议保护工作表并解锁数据输入单元格可能是一个更好的解决方案,但这种方法很有效。几点注意:

  • 要“进入”选项卡序列,您需要选择一个数据输入单元格
  • 要“中断”选项卡序列(以便您可以选择其他单元格),您可以进行多单元格选择
  • 代码:

    将lastCellAddress设置为字符串
    专用子工作表\u选择更改(ByVal目标作为范围)
    Dim tabArray作为变体
    尺寸一等长、地址、mCurr、indx、mPrev
    如果Target.Cells.CountLarge=1,则
    tabArray=数组(“B5”、“C6”、“D7”、“E8”)
    addr=Target.Address(False,False)
    mCurr=Application.Match(addr,tabArray,0)
    如果是IsError(mCurr),则“当前选择不是数据输入单元格”
    如果lastCellAddress为“”,则
    '用户以前是否在数据输入单元格中?
    mPrev=Application.Match(lastCellAddress,tabArray,0)
    如果不是IsError(mPrev),则
    'mPrev是基于1的,但tabArray是基于0的。。。
    indx=IIf((mPrev-1)Me.Range(tabArray(indx))。按照@Basher的建议,选择“保护工作表并解锁数据输入单元格可能是一个更好的解决方案,但这种方法很有效。几点注意:

  • 要“进入”选项卡序列,您需要选择一个数据输入单元格
  • 要“中断”选项卡序列(以便您可以选择其他单元格),您可以进行多单元格选择
  • 代码:

    将lastCellAddress设置为字符串
    专用子工作表\u选择更改(ByVal目标作为范围)
    Dim tabArray作为变体
    尺寸一等长、地址、mCurr、indx、mPrev
    如果Target.Cells.CountLarge=1,则
    tabArray=数组(“B5”、“C6”、“D7”、“E8”)
    addr=Target.Address(False,False)
    mCurr=Application.Match(addr,tabArray,0)
    如果是IsError(mCurr),则“当前选择不是数据输入单元格”
    如果lastCellAddress为“”,则
    '用户以前是否在数据输入单元格中?
    mPrev=Application.Match(lastCellAddress,tabArray,0)
    如果不是IsError(mPrev),则
    'mPrev是基于1的,但tabArray是基于0的。。。
    indx=IIf((mPrev-1)Me.Range(tabArray(indx))。选择“使用名称范围不起作用,因为某些字段是中断功能的下拉列表”选择“使用名称范围不起作用,因为某些字段是中断功能的下拉列表”
    
    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