循环递增一个数字的变量
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
我有一个 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