Nicht genügend Arbeitsspeicher in VBA

Iqra Hasnain 15 Februar 2024
Nicht genügend Arbeitsspeicher in VBA

In diesem Artikel gehen wir anhand einiger Beispiele auf den Fehler Out of memory in VBA ein.

Nicht genügend Arbeitsspeicher-Fehler in VBA

VBA gibt einen Out of memory-Fehler aus, wenn Excel alle Ressourcen unseres Geräts verwendet hat, während das Makro ausgeführt wurde. Der Speicher zum Berechnen und Ausführen des Codes wird erschöpft sein.

Es tritt auf, wenn viele der Programme auf dem Gerät ausgeführt werden und wir versuchen, das umfangreiche Makro in Excel auszuführen, oder wir können möglicherweise eine Dauerschleife erstellen, wenn der Fehler in Excel aufgetreten ist.

Wenn jemand mit einer Arbeitsmappe arbeitet, die so viele Arbeitsblätter und viele Zeilen enthält, tritt in VBA ein Fehler Nicht genügend Arbeitsspeicher auf. Ein Speichermangel-Fehler tritt auf, wenn wir eine Schleife erstellen, die mit einer erheblichen Datenmenge funktioniert.

Wenn wir mit vielen Objekten arbeiten und alles mit der SET-Anweisung setzen, aber wenn wir die Verweise auf die Objekte zwischen Schleifen oder Prozeduren nicht löschen. Lassen Sie uns anhand eines Beispiels diskutieren.

Der Code wird unten in der Schleife angezeigt, was zu einem Speichermangel-Fehler führen kann, wenn wir mehrere Dateien mit mehreren Blättern öffnen.

Sub TestMemory()
  Dim wb As Workbook
  Dim ws As Worksheet
  Dim i As Single
  For Each wb In Application.Workbooks
    For Each ws In wb.Sheets
      Do Until ActiveCell = "A1048576"
        ActiveCell = 1 + i
        i = i + 1
        ActiveCell.Offset(1, 0).Select
    Loop
  Next ws
Next wb
End Sub

Objekte in VBA freigeben

Bei der Arbeit mit Schleifen und Objekten müssen wir darauf achten, dass wir das Objekt auf NOTHING setzen, sobald wir es verwenden. Wir geben Speicher frei, wenn er nicht mehr benötigt wird.

set str = ""
set num = []

Wir werden sicherstellen, dass nur eine Instanz von Excel ausgeführt wird. Wenn wir mit riesigen Dateien und einer großen Datenmenge arbeiten, müssen wir überprüfen, ob nicht viele Sitzungen in Excel geöffnet sind.

Wenn es benötigt wird, öffnen Sie es einmal. Um dies zu überprüfen, müssen wir zum Task-Manager gehen und überprüfen, wie viele Instanzen von Excel zu diesem Zeitpunkt ausgeführt werden.

Drücken Sie Strg+Alt+Entf auf der Tastatur und klicken Sie dann auf den Task-Manager, um sicherzustellen, dass nur eine Instanz von Excel ausgeführt wird.

Objekte in VBA freigeben (1)

Wir können auch im Task-Manager überprüfen, dass kein Beispiel für Excel hinter den Kulissen läuft. Schauen Sie im Task-Manager nach unten, bis Sie Hintergrundprozesse sehen, und stellen Sie sicher, dass Excel nicht in dieser Stimmung für Projekte ist.

Objekte in VBA freigeben (2)

Überprüfen Sie die Größe Ihres Excel-Datensatzes. Die häufigen Linien und Segmente wurden unter die in Ihren verwendeten Arbeitsblättern verschoben.

Erfolg beinhaltet Gedächtnis in diesen Zellen – unabhängig davon, ob diese Zellen leer sind. Überprüfen Sie die Größe des Dokuments, indem Sie CTRL+SHIFT+END auf der Konsole drücken, um zu sehen, wo Ihr Zellenzeiger landet.

Angenommen, es landet gut unter der letzten Zelle, die Sie verwenden, stellen Sie sicher, dass Sie alle nicht gefüllten Zeilen und Abschnitte über dem Zellenzeiger löschen, und speichern Sie die Aufzeichnung anschließend erneut. Dadurch wird die Größe Ihres Excel-Dokuments verringert.

Alternative Möglichkeiten zum Überprüfen des Speichers in VBA

Es gibt verschiedene alternative Möglichkeiten, den Speicher in Excel freizugeben. Die geniale Idee ist, Excel zu schließen, wenn Sie es nicht verwenden, und es später zu öffnen.

Es wird jeglichen Speicher freigeben, den Excel gespeichert hat, und es neigt dazu, Speicher zu halten, selbst wenn die Arbeitsmappe nicht geöffnet ist.

Stellen Sie kontinuierlich sicher, dass Ihre Version von Office auf dem neuesten Stand ist, indem Sie auf Ihrem Gerät nach Updates suchen und nach allen VBA-Add-Ins suchen, die Sie verwenden werden, die Sie aber noch nicht verwenden. Sie können diese deinstallieren, um deutlich mehr Speicher freizugeben.