如何用其他动态数组或值混合填充动态数组?

时间:2012-11-16 13:34:57

标签: arrays vba ms-access access-vba

假设您从数据库中获取了一串array-Dimensions。它看起来像这样:"[1][2][1]"现在你有一个相应的值,我们称之为B

我必须创建一个这种格式的数组:(x,(B))

如果是另一个值,我们称之为A有这个Dimension-String:[1][1],数组应该像这样填充:(A,(B))

如果偶然存在另一个名为C且带有字符串[1][2][2]的值,则该数组应该如下所示:(A,(B,C))

我想到了类似的东西:

Redim Array1(1)
Redim Array2(1)
Array1(0) = A
Array2(0) = B
Array2(1) = C
Array1(1) = Array2()

但这是一种动态的方式。在我看来,vba不支持嵌套数组。 不幸的是,多维数组不起作用,因为“维度”不一致。任何帮助赞赏

编辑: 尝试过:

c = 0
dim array1() as Variant
redim preserve array1(c)
array1(c) = split(mid("[1][4]",2,len("[1][4]")-2),"][")

它给了我一个类型不匹配错误

3 个答案:

答案 0 :(得分:1)

这有效:

Private Sub testArray()
  Dim DynamicArray1() As Variant
  Dim DynamicArray2() As Variant

  ReDim DynamicArray1(1)
  ReDim DynamicArray2(1)
  DynamicArray1(0) = "A"

  DynamicArray2(0) = "B"
  DynamicArray2(1) = "C"

  DynamicArray1(1) = DynamicArray2
End Sub

Sub test2()
  Dim c As Integer: c = 0
  Dim array1() As Variant
  ReDim Preserve array1(c)
  array1(c) = Split(Mid("[1][4]", 2, Len("[1][4]") - 2), "][")
End Sub

答案 1 :(得分:0)

您可以在VBA中嵌套数组。您只需确保父数组是变体数组。任何“子”数组都可以是您想要的任何类型。在这种情况下,父数组的元素仍然是变体,但恰好是数组的变体。以下是如何使用它的示例:

Dim array1(1)
Dim array2(1 To 2) As String
array2(1) = "Hello"
array2(2) = "World"
array1(1) = array2
'Usage explanation:
'array1(1) returns the first element of parent array
'array1(1)(1) returns the first element of the returned element.
MsgBox array1(1)(1) & " " & array1(1)(2)

答案 2 :(得分:0)

您可以始终使用集合/字典而不是数组,它们不必键入并根据需要进行扩展