难以在Excel中将VBA数组保存到范围中

我已经玩了好几个小时了,也没有接近解决scheme。

当我按照以下方式创build一个数组时,它会毫无困难地输出到一个范围:

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 

但是,当我以下面的方式创build一个输出数组时,它只是将一个大的空白数组粘贴到我的电子表格中。 代码的第一部分可能大部分是不相关的,但我想包括它以防万一我什么都没有了:

 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 

这很奇怪,因为OutArray中的每一个元素,经过检查,似乎都在那里。 我的手工生成的数组工作正常,但自动生成的数组 – 几乎在任何方面似乎都是相似的 – 没有工作。 任何人知道为什么

我怀疑这只是你的REDIM声明。 在你的第一个例子中,你有这样的:

 ReDim OutArray(1 To 1, 1 To NumArrayCols) As Variant 

但在第二个例子中,你这样做:

 ReDim OutArray(1, 1 To NumArrayCols) As Variant 

注意区别? 当你说ReDim A(1 To 1) ,上下界都是1,但是当你只说Redim(1)只有上界是1,下界被设置为默认值,即零(0) 。 因此,这两个数组的形状和大小不一样,因此在第二种情况下,您的数组无法正确放入目标范围。