arrays - Excel转置二维数组 - 内存不足问题
问题描述
我有一个 VBA 宏,我想在其中将一个数组写入 Excel 工作表。我在某些机器上收到“内存不足”运行时错误。我可以在我的开发 PC 上轻松运行它,但我的客户遇到了问题。
在这里,我定义了我的Values数组:
Dim Values()
Dim idx As Long
idx = 0
然后我有一个 for 循环,我动态地重新调整数组,并将我的值添加到它:
for cycle...
ReDim Preserve Values(16, 0 To idx)
Values(0, idx) = "some text"
Values(1, idx) = "some other text"
....
Values(15, idx) = "last values for this row"
idx = idx + 1
next
然后这是我的代码失败的地方:
With ws
.Range(.Cells(1, 1), .Cells(1+ idx - 1, 16)).value = TransP(Values)
End With
这是TransP转置功能:
Public Function TransP(var As Variant) As Variant
Dim outP() As Variant, i As Long, j As Long
ReDim outP(LBound(var, 2) To UBound(var, 2), LBound(var, 1) To UBound(var, 1))
For i = LBound(outP) To UBound(outP)
For j = LBound(var) To UBound(var)
outP(i, j) = var(j, i)
Next
Next
TransP = outP
End Function
正如我所说,我可以运行宏,并得到类似 108770 行的内容。相同的 108770 行在我的客户端 PC 上不起作用。
我希望 TransP 函数在他的 PC 上放弃,所以我应该将数组拆分为多个较小的块,并逐个写入它们吗?还是我的数据模型不好?
解决方案
您还可以创建一个循环来逐行写入输出数组,这将花费更多时间,但您很可能不会出现内存不足错误。
过去,当我遇到数组内存不足问题时,我只是尝试使用常规 excel 命令执行操作,在这种情况下,您可以只复制范围,然后粘贴转置的值:
.PasteSpecial Paste:=xlPasteValues, Transpose:=True