Freigeben über


Nicht genügend Stapelspeicher (Fehler 28)

Der Stapel ist ein Speicherarbeitsbereich, der mit den Anforderungen Ihres ausgeführten Programms dynamisch wächst oder schrumpft. Dieser Fehler hat die folgenden Ursachen, und er kann wie folgt gelöst werden:

  • Sie haben zu viele aktive Function-, Sub- oder Property-Prozeduraufrufe . Überprüfen Sie, ob Prozeduren nicht zu tief geschachtelt sind. Dies gilt insbesondere für rekursive Prozeduren, d. h. für Prozeduren, die sich selbst aufrufen. Stellen Sie sicher, dass rekursive Prozeduren ordnungsgemäß abgeschlossen werden. Verwenden Sie das Dialogfeld Aufrufe, um anzuzeigen, welche Prozeduren aktiv sind (im Stapel).

  • Ihre lokalen Variablen erfordern mehr lokalen Speicherplatz, als für Variablen zur Verfügung steht.

    Versuchen Sie, einige Variablen stattdessen auf Modulebene zu deklarieren. Sie können auch alle Variablen in der Prozedur statisch deklarieren, indem Sie dem Property-, Sub- oder Functions-Schlüsselwort Static voranstellen. Alternativ können Sie die Anweisung Static verwenden, um individuelle Static -Variablen innerhalb von Prozeduren zu deklarieren.

  • Sie haben zu viele Zeichenfolgen mit fester Länge. Zeichenfolgen mit fester Länge in einer Prozedur werden schneller bewertet, benötigen jedoch mehr Stapelspeicher als Zeichenfolgen mit variabler Länge, weil die Zeichenfolgendaten selbst im Stapel abgelegt werden. Versuchen Sie, einige Ihrer Zeichenfolgen mit fester Länge neu als Zeichenfolgen mit variabler Länge zu definieren. Wenn Sie in einer Prozedur Zeichenfolgen mit variabler Länge deklarieren, wird nur die Zeichenfolgen-Beschreibung (und nicht die Daten selbst) im Stapel abgelegt. Sie können die Zeichenfolge auch auf Modulebene definieren; dies erfordert keinen Stapelspeicher. Auf Modulebene deklarierte Variablen sind standardmäßig öffentlich, die Zeichenfolge ist also für alle Prozeduren im Modul sichtbar.

  • Sie haben zu viele verschachtelte DoEvents-Funktionsaufrufe. Verwenden Sie das Dialogfeld Aufrufe, um die aktiven Prozeduren anzuzeigen (im Stapel).

  • Ihr Code hat eine Ereigniskaskade ausgelöst. Eine Ereigniskaskade wird ausgelöst, wenn ein Ereignis ausgelöst wird, das eine bereits im Stapel befindliche Ereignis-Prozedur aufruft. Eine Ereigniskaskade ähnelt einem nicht beendeten rekursiven Prozeduraufruf, ist jedoch nicht so offensichtlich, da der Aufruf durch Visual Basic durchgeführt wird und nicht durch einen expliziten Aufruf in Ihrem Code. Verwenden Sie das Dialogfeld Aufrufe, um die aktiven Prozeduren anzuzeigen (im Stapel).

Um das Dialogfeld Aufrufe anzuzeigen, wählen Sie rechts neben dem Feld Prozedur im Fenster Debuggen die Schaltfläche Aufrufe aus, oder wählen Sie den Befehl Aufrufe aus. Weitere Informationen erhalten Sie, indem Sie das fragliche Element auswählen und F1 (unter Windows) bzw. HILFE (unter Macintosh) drücken.

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.