Ich habe vor einiger Zeit mit einem Kollegen gesprochen, und er hat ein Problem beschrieben, das er mit einem Makro hatte, das auf einem sehr leistungsfähigen Computersystem ausgeführt wurde.

Es scheint, dass das Makro immer abstürzt und die Maschine einfriert, immer mit einem Speicherfehler. Mein Kollege meinte, wenn das Makro im Hintergrund ausgeführt werden könnte, würde es nicht so viele Ressourcen verbrauchen und nicht abstürzen.

Ich wusste jedoch, dass die vorgeschlagene Lösung das Problem nicht unbedingt lösen würde. Während möglicherweise einige Ressourcen freigesetzt werden, wird dem System möglicherweise der Speicherplatz ausgehen. Warum? Weil Probleme mit zu wenig Speicher normalerweise auf Codierungsprobleme im ursprünglichen Makro zurückzuführen sind.

„Speicherlecks“ (die zu einem Speichermangel führen) können durch eine beliebige Anzahl von Problemen im Makrocode verursacht werden.

Die beste Lösung ist eine Runde Late-Night-Debugging, bei der Sie durch den Makrocode gehen und analysieren, wo sich das Problem einschleicht. Suchen Sie zuerst nach den offensichtlichsten (aber leicht zu übersehenden) Problemen, z. B. Endlosschleifen. Wenn das Makro häufig wiederholt verarbeitet wird (Arbeitsblätter durchlaufen), stellen Sie sicher, dass Sie den gesamten Speicher freigeben, den Sie für Ihr Makro deklariert haben. Beispielsweise sollte für jede von Ihnen verwendete SET-Anweisung eine entsprechende Anweisung vorhanden sein, die das Objekt auf NICHTS setzt, und diese Anweisungen sollten sich innerhalb der Schleife befinden.

Wenn Sie die Makros durchlaufen können, ohne dass sie fehlschlagen, besteht eine gute Chance, dass das Problem in einem Timing-Problem in den Threads liegt – ein Timing-Problem, das natürlich nur auftritt, wenn das Makro vollständig ausgeführt wird seine eigene. Wenn Sie vermuten, dass dies das Problem ist, kann möglicherweise eine erneute Sequenzierung der Ereignisse im Makro das Problem umgehen.

Wenn das Makro DDE verwendet, sollten Sie sich bewusst sein, dass Microsoft die Verwendung von OLE-Automatisierung anstelle von DDE empfiehlt. Timing-Probleme sind bei DDE ziemlich häufig, und Microsoft hält sie jetzt für veraltet und zu flockig, um sie zu beheben (was bedeutet, dass sie sie nicht unterstützen). In VBA können mehrere Aufrufe einer Unterroutine auch zu Speicherverlusten führen, und solche Unterroutinen müssen als benutzerdefinierte Funktionen neu geschrieben werden.

Sie sollten auch sicherstellen, dass alle Variablenreferenzen vollständig deklariert sind. Ich habe einige Berichte gesehen, in denen Makros zwischen Arbeitsblättern „verwirrt“ wurden, und selbst wenn Sie Alt + Tab verwenden, um den Fokus aus Excel zu entfernen.

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (2579) gilt für Microsoft Excel 97, 2000, 2002 und 2003.