エクセルVBAでのメモリ開放について

2019年2月16日土曜日

Excel VBA エクセル 業務効率化 小技

いろんなサイトを参考に、こまめに「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
→<対象のプロセス名>はアスタリスクで全てのプロセスを対象にできます。
 「vbHide」はコマンドプロンプトを表示させない為です。

<説明>
・オプション「Range("P3")」でメモリ開放を”ON”にしていたら実行します。
・「Range("P4")」が「ThisWorkbook.Path」だったらエクセルファイルと
 同じディレクトリにある「empty.exe」を実行。
・「Range("P4")」が「ThisWorkbook.Path」でなかったら「Range("P4")」に
 指定したパスにある「empty.exe」を実行。

MSさん「empty.exe」を標準でシステムディスクに置いておいてください!

このブログを検索

自己紹介

IT関連の技術情報や、取り組んでいる業務効率化について掲載。人手不足対策、教育についても興味あり。

アーカイブ

連絡フォーム

名前

メール *

メッセージ *

QooQ