如何在VBA UserForm中确定下一个tabstop?

时间:2009-12-06 11:12:55

标签: vba

我有一个UserForm,其上有一些文本框输入字段,由复选框启用/禁用。单击复选框进行检查时,我想将焦点移动到现在启用的文本框中。

文本框是选项卡顺序中复选框后的下一个控件,因此使用Tab键顺序查找相应的文本框似乎是一个好主意。

但是......如何在给定控件之后在Tab键顺序中找到下一个控件?有没有办法做到这一点,或者我是否必须枚举所有控件并自行计算出来?

4 个答案:

答案 0 :(得分:3)

我理解这是在“枚举所有控件”的标题下,但它非常简单,我附上了完整性的代码:

Private Sub CheckBox1_Click()
    Dim ctl As Control
    For Each ctl In Me.Controls
        If ctl.TabIndex = Me.ActiveControl.TabIndex + 1 Then
            ctl.SetFocus
            Exit For
        End If
    Next
End Sub

答案 1 :(得分:1)

作为一种不同的看待这种方式。

您是否可以使用您想要关注的文本框,并在checkbox.tag

中设置该名称

然后在你的vba代码中使用

DoCmd.GoToControl CheckBox.Tag

CheckBox.Tag Textbox.Name 的位置?

编辑:

好的,我找到了这个

SendKeys "{Enter}", True

VBA code for moving to next control? It must be eeeasy

答案 2 :(得分:0)

我遇到了麻烦

SendKeys "{Enter}", True

经过一些实验,我发现这是有效的

SendKeys "{TAB}", True

有一点需要注意......如果您在VBE中逐步执行代码并在表单上观看它,则执行SendKeys将在代码中执行。首先让我困惑的是为什么我的代码开始变得奇怪,例如额外的间距和额外的线条!

答案 3 :(得分:0)

在充分尊重到目前为止提供的善意建议的情况下,如果有一种方法可以在用户表单本身内解决这个问题,就不应该通过编程来解决这个问题。

单击用户表单本身,然后右键单击并选择" tab order"。然后,您可以将用户窗体中的每个元素移动到您想要的任何位置,而不必诉诸复杂且不稳定的编程技巧。