いろんなサイトを参考に、こまめに「Set obj = Nothing」したり
登場する変数を整理してみたりしましたが、どうしてもメモリーリークするんです。
当サイトの
エクセル版WBS作成ツール
も処理する行数にもよりますが
少しずつメモリーリークしてしまっていました。ということで
良いのか悪いのかVBAの処理の中で「EXCEL.EXE」を対象に「empty.exe」を実行することにしました。
これが思った以上に動作が安定して、連続で何度実行してもメモリーリークしなくなりました。
※「empty.exe」とはMicrosoft純正のメモリ開放ツールです。
ソースはこんな感じです。If Worksheets("オプション").Range("P3") = "ON" Then
If Worksheets("オプション").Range("P4") = "ThisWorkbook.Path" Then
emptyPath = ThisWorkbook.Path
Else
emptyPath = Worksheets("オプション").Range("P4")
End If
emptyPath = emptyPath & "\empty.exe"
CreateObject("WScript.Shell").Run "cmd /c " & emptyPath & " EXCEL.EXE", vbHide
Else
End If
<empty.exeの書式>
cmd /c
→<対象のプロセス名>はアスタリスクで全てのプロセスを対象にできます。
「vbHide」はコマンドプロンプトを表示させない為です。
<説明>
・オプション「Range("P3")」でメモリ開放を”ON”にしていたら実行します。
・「Range("P4")」が「ThisWorkbook.Path」だったらエクセルファイルと
同じディレクトリにある「empty.exe」を実行。
・「Range("P4")」が「ThisWorkbook.Path」でなかったら「Range("P4")」に
指定したパスにある「empty.exe」を実行。
MSさん「empty.exe」を標準でシステムディスクに置いておいてください!
0 件のコメント:
コメントを投稿