大きなマクロを実行する(Microsoft Excel)
しばらく前に同僚と話していたところ、彼は非常に強力なコンピューターシステムで実行されているマクロで発生している問題について説明しました。
マクロは常にクラッシュしてマシンをフリーズし、常にメモリ不足エラーが発生するようです。私の同僚は、マクロをバックグラウンドで実行できれば、それほど多くのリソースを使用せず、クラッシュしないと考えていました。
しかし、提案された解決策が必ずしも問題を解決するとは限らないことを私は知っていました。一部のリソースを解放する可能性はありますが、システムは最終的にメモリ不足になります。どうして?メモリ不足の問題は通常、元のマクロのコーディングの問題が原因であるためです。
「メモリリーク」(メモリ不足状態につながる)は、マクロコードのさまざまな問題によって引き起こされる可能性があります。
最善の解決策は、深夜のデバッグを繰り返し、マクロコードをステップ実行し、問題がどこに忍び寄っているのかを分析することです。無限ループなど、最も明白な(ただし見落とされがちな)問題を最初に探します。マクロが多くの反復処理(ワークシートのループ)を実行している場合は、マクロに対して宣言したすべてのメモリを解放していることを確認してください。たとえば、使用するすべてのSETステートメントについて、オブジェクトをNOTHINGに設定する対応するステートメントが必要であり、それらのステートメントはループ内にある必要があります。
マクロが失敗することなくステップスルーできる場合、問題はスレッド内のある種のタイミングの問題にある可能性があります。もちろん、マクロがフルチルトで実行されている場合にのみ発生するタイミングの問題です。それ自身。これが問題であると思われる場合は、マクロ内のイベントの再シーケンスによって回避できる可能性があります。
マクロがDDEを使用する場合、MicrosoftがDDEの代わりにOLEオートメーションの使用を推奨していることに注意する必要があります。タイミングの問題はDDEでかなり一般的であり、Microsoftは現在、DDEは廃止されており、修正するには不安定すぎると見なしています(つまり、DDEはサポートされません)。 VBAでは、サブルーチンを複数回呼び出すとメモリリークが発生する可能性があり、そのようなサブルーチンはユーザー定義関数として書き直す必要があります。
また、すべての変数参照が完全に宣言されていることを確認する必要があります。ワークシート間でマクロが「混乱」し、Alt + Tabを使用してExcelからフォーカスを削除した場合でもいくつかの報告があります。
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(2579)は、Microsoft Excel 97、2000、2002、および2003に適用されます。