我有以下代码。哪个工作正常,但现在我收到了错误。 "运行时错误' 7':Out of Memory"以下是我的代码:
Sub SpiltData()
Dim tmpArr As Variant, rCell As Range, v, i As Long, v2(), J As Long, K As Long
Dim ws1 As Worksheet, ws2 As Worksheet, n As Long
ThisWorkbook.Sheets("Data").Activate
Set ws1 = ActiveSheet
Set ws2 = Sheets("Hours Sorted") 'You need to specify a sheet here
v = ws1.Range("J6").CurrentRegion.Value
ReDim v2(1 To UBound(v, 1) * 100, 1 To UBound(v, 2))
n = 1
For i = LBound(v, 1) To UBound(v, 1)
tmpArr = Split(v(i, 10), Chr(10))
For K = 0 To UBound(tmpArr)
For J = LBound(v, 2) To UBound(v, 2)
v2(n, J) = v(i, J)
Next J
v2(n, 10) = tmpArr(K)
n = n + 1
Next K
Next i
ws2.Range("A1").Resize(n, UBound(v2, 2)) = v2
End Sub
我能做些什么不同的事情吗?
答案 0 :(得分:0)
如果你是从一个巨大的选择开始,并且你的回车分区数据在你的数组的位置10很大,那么你将导致"巨大的x大"结果数量,全部保存在内存中,直到它被转储回Close
。
或者,您可以遍历范围并在遇到值时写出来。保持变量的美观和小巧,并且可能更容易理解和调试代码。为了更快地完成这项工作,您可以关闭ws2
切换。
application.screenupdating
这可能需要稍微调整一下,因为我从阵列转换到范围并做了一些假设,但它会让你在球场上,如果它需要和你的主要限制,excel会在这整天开始是excel中的行数而不是ram。