私の目的は、Excelのセル範囲に2次元のバリアントの値を割り当てることです。配列に範囲を割り当てるときのVBAメモリの問題
割り当ては正常ですが、私はメモリの問題(リーク)に直面しています。私がExcelを起動すると、プロセスには多少のRAMが必要になります。次のコードを実行した後(新しいブックを作成し、範囲を割り当て、保存せずにブックを閉じる)、プロセスには33MoのRAMが必要です。
誰かが私が間違っていることを考えているのですか?ここで
よろしく、 アレクサンダー
コード
Option Explicit
Sub test()
Dim nLines As Long
Dim xSize As Long
Dim j As Long
Dim i As Long
'Creating New Empty Workbook
Application.Workbooks.Add
Range("A1").Select
Application.ScreenUpdating = False
nLines = 10000
xSize = 200
Dim myRange As Range
Dim myArray() As Variant
ReDim myArray(1 To nLines, 1 To xSize)
'Assigning some values
For j = 1 To nLines:
For i = 1 To xSize:
myArray(j, i) = i * 4/3#
Next i
Next j
Set myRange = Range(ActiveCell, ActiveCell.Offset(nLines - 1, xSize - 1))
myRange .Value = myArray
'Cleaning up
Erase myArray
Set myRange = Nothing
'Closing workbook without saving
Application.ActiveWorkbook.Close (False)
Application.ScreenUpdating = True
End Sub
Moが何であるか分かりませんが、Excel実行時に11 MBの説明できないRAMがVBAなしでもかなり一般的です... – Aprillion
'私は間違っていると思いますか?あなたが作成しているアレイを処理するための-45MbのRAMがかなり普通です:)あなたが読んでみたいかもしれない「Excel Memory Limits - Charles Williamns」の興味深い記事は? http://www.decisionmodels.com/memlimitsc.htm –
あなたの答えをありがとう。 11 MB(フレンチでは、ごめんなさい)、重要なリークではない、と私は同意するが、私が投稿したコードは、私が非常に大きな範囲のためにしなければならないことの一例に過ぎない。私が200の代わりにxSize = 2000を設定すると、100 MBのリークが発生します...コードを1行ずつデバッグすると、 "Set myRange = Nothing"という命令はメモリを解放しません。何か案が ? – Alexander