使用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中?