循环递增一个数字的变量

Cycle through variables incremented by a digit

我有一个 Access 表单,其中重复了一堆部分,例如:姓名、年龄、性别。这些文本框的变量名称是:Name1、Name2、...;年龄 1, 年龄 2, ...;等等

我想在按下按钮后将所有这些值存储在一个数组中。我想知道是否有一种方法可以在 for 循环中循环遍历这些变量名称,而不是对所有变量名称进行硬编码,例如:

For i = 1 to 4
 ArrayName(i) = ("Name" & i).value 
 ArrayAge(i) = ("Age" & i).value
 ArrayGender(i) = ("Gender" & i).value
next i

我可以通过 ("Name" & i) 获取字符串 Name1,但是当我在它后面添加 .value 时,它​​似乎不起作用。

我也试过将变量名作为字符串存储到另一个数组中,然后尝试使用该数组元素来获取值,但这也不起作用。

错误是因为代码只是构建一个字符串“Name1”,而该字符串没有值 属性。考虑:

Me.Controls("Name" & i).Value

或简化为:

Me("Name" & i)

值为默认值 属性,因此不必参考。但是,Me 限定符很重要,否则数组将只填充控件的名称“Name1”,而不是控件的值。

默认情况下,数组是从 0 开始的,这意味着元素索引从 0 开始,因此迭代 1 到 4 以引用数组元素将不会提供正确的结果。考虑:

ArrayName(i - 1) = Me("Name" & i)

否则,在模块头中使用 Option Base 1 将数组声明为 1-base。

可以使用一个二维数组代替 3 个一维数组。

Dim aryD(4, 3) As Variant, x As Integer, y As Integer
For x = 1 To 4
    For y = 1 To 3
        aryD(x - 1, y - 1) = Me(Choose(y, "Name", "Age", "Gender") & x)
    Next
    'verify array elements values
    Debug.Print aryD(x - 1, 0) & " : " & aryD(x - 1, 1) & " : " & aryD(x - 1, 2)
Next