我在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个字段,应在其中输入数据。
有人可以帮我吗?
谢谢!
答案 0 :(得分:0)
类似的事情应该起作用:
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