使用VBA控制Excel中的Tab键行为

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用VBA控制Excel中的Tab键行为相关的知识,希望对你有一定的参考价值。

我在excel中创建了一个表单,现在想通过按Tab键从单元格跳转到单元格,但只能在用户输入数据的单元格之间跳转。一种解决方案是锁定纸张,只留下未锁定的字段,用户应在其中输入内容。但是,这不适用于包含合并单元格(我需要)的字段,如果合并字段分配在“单个条目单元格”旁边的多行上,它也会遇到困难。 Tab键然后只是跳回到前一个单元格而不向前移动。

因此,我需要“手动”控制Tab键的行为,并遇到以下代码:

Private Sub Worksheet_Activate()
    Application.OnKey "{TAB}", "TabIntercept"
End Sub

Private Sub Worksheet_Deactivate()
    Application.OnKey "{TAB}"
End Sub

上面的工作是在按下TabKey时触发事件。现在我需要帮助编写函数TabIntercept来将tab键发送到我表单中的下一个入口单元格。假设我在B3,B8,D3,E3,E6中有5个字段,其中应输入数据。

谁能帮我这个?

谢谢!

答案

这样的事情应该有效:

Sub TabIntercept()

    Const TAB_ORDER As String = "B3,B8,D3,E3,E6" 'entry cell addresses in tab order
    Dim arr, a, x, nxt, sel

    If TypeName(Selection) <> "Range" Then Exit Sub 'Exit if (eg) a shape is selected
    Set sel = Selection.Cells(1) 'if multiple cells selected use the first...

    arr = Split(TAB_ORDER, ",")
    For x = LBound(arr) To UBound(arr)
        If sel.Address(False, False) = arr(x) Then
            'loops back to start if at end...
            nxt = IIf(x = UBound(arr), LBound(arr), x + 1)
            Range(arr(nxt)).Select
            Exit For
        End If
    Next x

End Sub

编辑:使用命名范围将非常相似 -

Sub TabIntercept2()

    Const TAB_ORDER As String = "tabs1,tabs2,tabs3,tabs4,tabs5"  'as named ranges
    Dim arr, a, x, nxt, sel

    If TypeName(Selection) <> "Range" Then Exit Sub 'Exit if (eg) a shape is selected
    Set sel = Selection.Cells(1) 'if multiple cells selected use the first...

    arr = Split(TAB_ORDER, ",")
    For x = LBound(arr) To UBound(arr)
        If sel.Address() = sel.Parent.Range(arr(x)).Address() Then
            'loops back to start if at end...
            nxt = IIf(x = UBound(arr), LBound(arr), x + 1)
            sel.Parent.Range(arr(nxt)).Select
            Exit For
        End If
    Next x

End Sub

以上是关于使用VBA控制Excel中的Tab键行为的主要内容,如果未能解决你的问题,请参考以下文章

使用Excel VBA,如何将某一个工作表保存到新建的Excel中?

excel vba 锁 ecs 键

excel vba 运行时错误

vba中tab空格怎么设置

请问Excel中只想取数字,怎么快速去掉前后空格和tab符号?

excel表格数据量很大时如何提高vba的效率