作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用的是 Excel 2010,工作表确实非常大(40 万行 X 20 列)。
我的代码旨在:
我编写了两个变量数组的定义作为变体并尝试通过复制工作表内容两次来初始化它们。
第一个副本有效,但到了第二个副本时,我遇到了“内存不足”错误。
如果有解决方法,您有什么想法吗?或者这只是 VBA/Excel 的限制。
有没有办法不预先定义/初始化目标数组,而是让它随着标准的每次成功限定而“增长”? (在如此规模的规模上)。
Sub CopyPending()
Dim LastRow As Long
Dim LastCol As Integer
Dim AllRange() As Variant
Dim CopyRange() As Variant
Dim i As Long
Dim x As Long
Dim z As Long
LastCol = 21
LastRow = ActiveSheet.UsedRange.Rows.Count
AllRange = Range(Cells(2, 1), Cells(LastRow, LastCol)).Value
CopyRange = Range(Cells(2, 1), Cells(LastRow, LastCol)).Value ''' ERROR TRIGGER
i = 1
x = 1
z = 1
For i = LBound(AllRange) To UBound(AllRange) - 1
If AllRange(i, 7) = "TestCriteria" Then
For z = 1 To LastCol
CopyRange(x, z) = AllRange(i, z)
Next z
x = x + 1
End If
Next i
With Sheets(2)
.Range(.Cells(2, 1), .Cells(x, LastCol)).Value = CopyRange
End With
End Sub
最佳答案
正如您帖子中的评论所示,此错误是由于工作内存不足造成的。
每个 Variant 类型变量占用 16 个字节,这就是您的代码需要大量内存的原因。因此,解决此问题的一种方法是增加计算机上的物理内存。
其他解决方案是按一定数量的行过滤数据。
Sub ProcessRows()
Dim originalData() As Variant
Dim maxRow as Long, currentRow as Long, incrementRow
maxRow = ActiveSheet.Usedrange.Rows.Count
currentRow =1
incrementRow=5000
While currentRow < maxRow
Set originalData = Range(.Cells(currentRow,1),.Cells(currentRow+incrementRow-1,20)
your process to filter data
currentRow = currentRow +incrementRow
Wend
End Sub
当然你可以使用逐行方法,但我假设你使用数组变量来加速你的代码,所以我不建议使用逐行方法。
关于Excel 上的 VBA "Out of Memory"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23180861/
我是一名优秀的程序员,十分优秀!