将多个文本框值传输到数组

Transfer multiple textbox values to array

我有一个包含 13 个文本框的用户表单,我试图从中将最后 10 个(即#4-#13)的值传输到一个数组中。我的想法是循环遍历表单上的所有控件并使用一个简单的计数器跳过前 3 个文本框,然后依次将我的数组元素设置为文本框的其余值。

For Each Ctrl In Me.Controls
    If TypeName(Ctrl) = "TextBox" Then
        i = i + 1
        If i > 3 Then
            PO(i - 3) = Ctrl.Value
        End If
    End If
Next Ctrl

这个概念本身是可行的;然而,循环从文本框 #3 而不是 #1 开始,我最终在我的数组中得到以下值 - (#6-#13, #1, #2)。因此,它找到的第一个文本框控件是#3,然后转到#13 并返回到#1 和#2。

这些框的命名(和制表符索引)符合我正在尝试做的逻辑顺序,但显然这个过程中有些东西我不太明白 - 或者 VBA得到它的方式与我不同。

For Each Ctrl 语句是否可能按照控件最初创建的顺序而不是 tabindex 或名称的顺序遍历控件?如果是这样,我怎样才能找到原来的创建顺序?

您可以这样做,使用控件名称的一致结构。

For i = 4 To 13
    PO(i - 3) = Me.Controls("Textbox" & i).Value
Next i