a) 通过 VBA 重置标签索引
假设文本框命名为 e.g. “TextBox1”、“TextBox2”等表示想要的顺序
您可以编写如下代码:
Private Sub UserForm_Initialize()
Dim no As Long
For no = 1 To 5 ' corresponding to tab indices 0..4
With Me.Controls.Item("TextBox" & no)
.TabIndex = no - 1
End With
Next
''optional continuation with Frame1 (checkbox container)
' Me.Controls.Item("Frame1").TabIndex = no - 1
End Sub
请注意,作为 第一号控件 的 TextBox1 将通过 0 的从零开始的 .TabIndex 属性获得焦点。
动态更改的选项卡索引将移动任何其他已经存在的索引
遵循它们的创建顺序。
替代循环
当然,也可以通过 array 循环通过以下方式保存控件对象:
Private Sub UserForm_Initialize()
Dim ctrls
ctrls = Array(TextBox1, TextBox2, TextBox3, TextBox4, TextBox5)
Dim i As Long
For i = LBound(ctrls) To UBound(ctrls)
ctrls(i).TabIndex = i
Next
''optional continuation with Frame1 (checkbox container)
'Me.Controls.Item("Frame1").TabIndex = i
End Sub
这将允许为您的文本框使用任何其他命名约定,例如ctrls = Array(ClientName, BasePay, ...).
b) 智能更改标签顺序(手动)
虽然现在可以正确执行动态更改的选项卡行为,但上述过程不会更改 designer 中现有的 hard 选项卡索引。
这是不令人满意的,特别是如果您想检查 VB 编辑器的属性窗口中的选项卡。
我个人更喜欢手动更改
- 在设计器模式下直接右键单击用户窗体并
- 在上下文菜单中选择“激活顺序”
或通过快速更改选择整个初学者组
- 按所需顺序选择第一个文本框(单击)和随后的文本框(Ctrl+单击)
- 并且只输入
0 作为(起始)tabindex。
而不是以编程方式操作 设计器(例如,使用库引用 Microsoft Visual Basic for Applications Extensibility 5.3)。