2012-09-24 96 views
1

我想問一下,Excel 2007使用的內存真的沒有限制嗎?excel 2007內存限制

微軟規範說有沒有限制

,我想驗證它,但我卻失敗

我的測試環境:Windows7的64位,4G內存,在使用中沒有太大的內存

這是我試過的,

創建大整數數組。這隻能使用1G Ram。失敗 - >提示OOM錯誤 創建大字符串數組,插入1000長度字符串,使用1.9G Ram。失敗 - >提示字符串空間不足

在工作表中創建1Million * 10列數據,並保留其複製。使用1.9G拉姆。失敗 - >提示一些隨機錯誤。

我的問題是,是否真的沒有內存限制或我真的用完了我的電腦上的所有可用內存?

回答

1

Excel內存限制因版本而異。 Excel 2007僅限於理論上2 GB的虛擬內存,但實際上通常無法使用盡可能多的內存碎片問題等。 有關更多詳細信息,請參見http://www.decisionmodels.com/memlimitsc.htm

+0

謝謝,我只記得我的操作系統是64位,但忘記Excel只有64位版本打破了2010版的限制.Excel 2007只有32位版本 – Larry

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版本中,VBA可以使用幾GB的內存,而在32位版本的Excel中,可以使用大約半個GB的內存。