1

请问Excel 2007使用的内存真的没有限制吗?

微软规范说没有限制

我想验证它,但我失败了

我的测试环境是:Windows7 64Bit,4G Ram,使用的内存不多

这是我尝试过的,

创建大整数数组。这只能使用1G Ram。FAIL-->PROMPT OOM Error Create large string array, insert 1000 length string ,使用 1.9G Ram。失败 --> 提示字符串空间不足

在工作表中创建 100 万 * 10 列数据,不断复制它。使用 1.9G 内存。FAIL --> 提示一些随机错误。

我的问题是,真的没有内存限制,还是我真的用完了我电脑上的所有可用内存?

4

2 回答 2

1

Excel 内存限制因版本而异。Excel 2007 仅限于理论上 2 GB 的虚拟内存,但实际上由于内存碎片问题等原因,通常无法使用那么多。请参阅http://www.decisionmodels.com/memlimitsc.htm了解一些更多细节。

于 2012-09-24T07:12:05.137 回答
0

要找出 VBA 可用的内存量,请复制/粘贴下面的代码并调用availableMemoryInMB()

Function allocateMB(intNumMB As Integer) As Boolean
    On Error Resume Next
    Dim a As Variant
    ReDim a(intNumMB, 256, 256) As Variant 'intNumMB x 256 x 256 x 16 bytes = intNumMB MB
    allocateMB = (Err.Number = 0)
    Err.Clear
    Erase a
End Function

Function availableMemoryInMB() As Integer
    Dim intLow As Integer, intHigh As Integer, intTest As Integer
    intTest = 1: intHigh = 0
    Do
        If allocateMB(intTest) Then
            intLow = intTest
            If intHigh = 0 Then
                intTest = intTest * 2
            Else
                intTest = (intLow + intHigh) / 2
            End If
        Else
            intHigh = intTest
            intTest = (intLow + intHigh) / 2
        End If
    Loop Until intHigh - intLow <= 1 And intHigh > 0
    availableMemoryInMB = intLow
End Function

代码的执行需要 2-20 秒。在 64 位 Excel 版本中,几 GB 的内存可供 VBA 使用,而在 32 位版本的 Excel 中,大约有半 GB 可用。

于 2017-06-28T12:34:54.387 回答