无法将VBA数组保存到Excel中的范围

Slo*_*rio 2 excel vba excel-vba

我已经玩了几个小时,而且还没有解决的办法。

当我以下列方式创建数组时,它输出到一个范围内没有任何困难:

Dim Destination As Range
Set Destination = NewSheet.Range("A1")

ReDim OutArray(1 To 1, 1 To NumArrayCols) As Variant
OutArray(1, 1) = "hello"
Destination.Resize(UBound(OutArray, 1), UBound(OutArray, 2)).Value = OutArray
Run Code Online (Sandbox Code Playgroud)

但是,当我以以下方式创建输出数组时,它只是将一个大的空白数组粘贴到我的电子表格中。代码的第一部分可能大部分都不相关,但是如果我丢失任何内容,我想将其包括在内:

ReDim OutArray(1, 1 To NumArrayCols) As Variant
Set ThisAtt = Wells.CurrWell.FirstAttribute(Skip:=False)
k = 1
OutArray(1, k) = "UWI"
Do
    ElevOffset = 0
    Set ThisAtt = Wells.CurrWell.CurrAttribute
    If InStr(LCase(ThisAtt.Name1), "elevation") Then
        OutArray(1, k + 1) = ThisAtt.Name1
        OutArray(1, k + 2) = ""
        OutArray(1, k + 3) = ThisAtt.Name2
        OutArray(1, k + 4) = ""
        ElevOffset = ElevOffset + 2
    Else
        OutArray(1, k + 1) = ThisAtt.Name1
        OutArray(1, k + 2) = ThisAtt.Name2
    End If
    OutArray(1, k + ElevOffset + 3) = "Recommend"
    OutArray(1, k + ElevOffset + 4) = "Rec. Value"
    OutArray(1, k + ElevOffset + 5) = "Comments"
    k = k + ElevOffset + 2 + AdditionalColumns
Loop While Not (Wells.CurrWell.NextAttribute(EnableSkipping:=False) Is Nothing)

Dim Destination As Range
Set Destination = NewSheet.Range("A1")
Destination.Resize(UBound(OutArray, 1), UBound(OutArray, 2)).Value = OutArray
Run Code Online (Sandbox Code Playgroud)

很奇怪,因为经过检查,OutArray中的每个元素似乎都在那里。我手动生成的数组可以正常工作,但是自动生成的数组(几乎在所有方面都相似)不起作用。有人知道为什么吗?

RBa*_*ung 5

我怀疑那只是你的REDIM陈述。在第一个示例中,您有以下内容:

ReDim OutArray(1 To 1, 1 To NumArrayCols) As Variant
Run Code Online (Sandbox Code Playgroud)

但在第二个示例中,您可以这样做:

ReDim OutArray(1, 1 To NumArrayCols) As Variant
Run Code Online (Sandbox Code Playgroud)

注意区别吗?当您说ReDim A(1 To 1)上限和下限均为1时,但Redim(1)仅说上限为1时,下限设置为默认值,即零(0)。因此,这两个数组的形状/大小不同,因此在第二种情况下,您的数组无法正确放入“目标范围”。