Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.07.2025 16:49:43
16.07.2025 16:28:01
16.07.2025 15:14:00
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Stapelspeicher zu klein

Forumthread: Stapelspeicher zu klein

Stapelspeicher zu klein
08.10.2003 20:45:27
Peppi
Hallo,

ich übergebe mit Call Test(strSuchtext)

an:

Public

Sub Test(strSuchtext As String)
Call Test2 (strSuchtext)
End Sub


Ich bekomme hierbei immer die Fehlermeldung Laufzeitfehler 28
Nicht genügend Stapelspeicher.

Weiß Jemand Rat?

Danke.

Gruß
Peppi
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Stapelspeicher zu klein
08.10.2003 20:51:41
Nepumuk
Hallo Peppi,

VBA Laufzeitfehler Nr. 28 "Nicht genügend Stapelspeicher"

Der Stapelspeicher ist ein Bereich des Arbeitsspeichers, der je nach Anforderungen des momentan ausgeführten Programms dynamisch seine Größe verändert. Dieser Fehler hat die folgenden Ursachen und Lösungen:

- Es sind zu viele Aufrufe von Function-, Sub- oder Property-Prozeduren aktiv.
Überprüfen Sie, ob Prozeduren eventuell zu tief verschachtelt sind. Dies kann insbesondere bei rekursiven Prozeduren (also bei Prozeduren, die sich selbst aufrufen) auftreten. Sorgen Sie dafür, daß rekursive Prozeduren ordnungsgemäß beendet werden. Mit dem Dialogfeld Aufrufeliste können Sie überprüfen, welche Prozeduren momentan aktiv sind (also Stapelspeicher benötigen).

- Für lokale Variablen steht nicht genügend lokaler Variablenspeicher zur Verfügung.
Versuchen Sie statt dessen, einige Variablen auf Modulebene zu deklarieren. Sie können auch alle Variablen in der betreffenden Prozedur als statisch deklarieren, indem Sie vor die Schlüsselwörter Property, Sub oder Function das Schlüsselwort Static setzen. Sie können mit der Static-Anweisung auch einzelne Variablen innerhalb einer Prozedur als Static-Variablen deklarieren.

- Es sind zu viele Zeichenfolgen fester Länge vorhanden.
Zwar erfolgen in einer Prozedur Zugriffe auf Zeichenfolgen fester Länge schneller als auf Zeichenfolgen variabler Länge, aber Zeichenfolgen fester Länge benötigen mehr Stapelspeicher, da die Daten der Zeichenfolge auf dem Stapel abgelegt werden. Versuchen Sie, einige Zeichenfolgen fester Länge als Zeichenfolgen variabler Länge zu deklarieren, da bei diesen nur der Zeichenfolgendeskriptor (also der Zeiger auf die Zeichenfolge und nicht die Daten selbst) auf dem Stapel abgelegt wird. Sie können die Zeichenfolge auch auf Modulebene definieren. Sie benötigt dann keinen Stapelspeicher, da auf Modulebene deklarierte Variablen standardmäßig den Typ Public haben, d.h. auf die Zeichenfolge kann von allen Prozeduren im Modul zugegriffen werden.

- Es gibt zu viele verschachtelte Aufrufe der DoEvents-Funktion.
Überprüfen Sie mit dem Dialogfeld Aufrufeliste, welche Prozeduren zur Zeit aktiv sind (also Stapelspeicher benötigen).

- Ihr Code hat eine Ereigniskette ausgelöst.
Eine Ereigniskette entsteht, wenn ein Ereignis ausgelöst wird, das eine weitere Ereignisprozedur aufruft, die sich bereits auf dem Stapel befindet. Eine Ereigniskette ähnelt einem nicht abgebrochenen Aufruf einer rekursiven Prozedur, ist jedoch weniger offensichtlich, da der Aufruf durch Visual Basic erfolgt und nicht explizit durch Ihren Code. Überprüfen Sie mit dem Dialogfeld Aufrufeliste, welche Prozeduren zur Zeit aktiv sind (also Stapelspeicher benötigen).

Hinweis
Das Dialogfeld Aufrufeliste wird angezeigt, wenn Sie im Testfenster auf die Schaltfläche mit den Auslassungspunkten rechts neben dem Feld Prozedur klicken oder den Befehl Aufrufeliste wählen.

Gruß
Nepumuk
Anzeige
AW: Stapelspeicher zu klein
08.10.2003 20:52:24
Hajo_Zi
Hallo Peppi

benutz mal die Suchdfunktion nach Stapelspeicher. Vielleicht hilft der Beitrag.

Falls Code vorhanden wurde dieser getestet unter Betriebssystem XP Pro und Excel Version XP SBE.
Bitte kein Mail, Probleme sollen im Forum gelöst werden.

Microsoft MVP für Excel

Das Forum lebt auch von den Rückmeldungen.

http://home.media-n.de/ziplies/

Anzeige
AW: Stapelspeicher zu klein
08.10.2003 20:53:57
Michael Scheffler
Hallo Peppi,

willst Du uns verar...? Du produzierst einen Endlosaufruf. Irgendwann ist der Stack voll.

Wenn Du etwas in der Art machen willst, die Funktion für Fakultät ist das berümteste Beispiel einer rekursiven Funktion, beruachst Du ein Abbruchkriterium.

Gruß

Micha
Anzeige
Anzeige

Infobox / Tutorial

Stapelspeicherfehler in Excel VBA beheben


Schritt-für-Schritt-Anleitung

  1. Überprüfe deinen Code: Achte darauf, dass keine rekursiven Aufrufe ohne Abbruchkriterium bestehen. Ein typisches Beispiel ist eine Funktion, die sich selbst aufruft, ohne eine Bedingung, um den Aufruf zu beenden.

  2. Verwende das Dialogfeld Aufrufeliste: Gehe zu Debug -> Aufrufeliste, um zu sehen, welche Prozeduren gerade aktiv sind. Dies hilft dir, den aktuellen Stapelspeicherverbrauch zu überwachen.

  3. Variablen deklarieren: Deklariere lokale Variablen, die in mehreren Prozeduren verwendet werden, auf Modulebene. Dies kann helfen, den Stapelspeicher zu entlasten. Beispiel:

    Dim myVariable As String
  4. Static-Anweisung nutzen: Setze das Schlüsselwort Static vor Variablen, die nur einmal initialisiert werden sollen. Dies kann den Speicherverbrauch reduzieren:

    Static myStaticVariable As Integer
  5. Zeichenfolgen optimieren: Verwende für lange Zeichenfolgen den Typ String anstelle von festgelegten Längen. So wird weniger Stapelspeicher benötigt.


Häufige Fehler und Lösungen

  • Laufzeitfehler 28: Dieser Fehler tritt oft auf, wenn zu viele Aufrufe von Prozeduren aktiv sind. Reduziere die Anzahl der verschachtelten Aufrufe.

  • Rekursionsfehler: Achte darauf, dass rekursive Funktionen ein Abbruchkriterium haben. Ohne dieses wird der Stapelspeicher schnell voll.

  • Ereignisketten: Wenn eine Ereignisprozedur sich selbst aufruft, kann dies ebenfalls zu einem Stapelspeicherfehler führen. Überprüfe, ob Ereignisse korrekt behandelt werden.


Alternative Methoden

  • VBA-Optionen anpassen: In den Excel-Optionen kannst du die Anzahl der maximalen rekursiven Aufrufe anpassen. Dies kann helfen, den Fehler zu vermeiden.

  • Fehlerbehandlung einbauen: Implementiere die Fehlerbehandlung in deinem VBA-Code, um den Laufzeitfehler abzufangen und gezielt darauf zu reagieren:

    On Error GoTo ErrorHandler
    ' Dein Code hier
    Exit Sub
    ErrorHandler:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description

Praktische Beispiele

Hier ist ein einfaches Beispiel zur Veranschaulichung der richtigen Nutzung von rekursiven Funktionen mit Abbruchkriterien:

Sub Fakultät(n As Integer)
    If n <= 1 Then
        MsgBox "Das Ergebnis ist 1"
    Else
        MsgBox "Das Ergebnis ist " & n * Fakultät(n - 1)
    End If
End Sub

In diesem Beispiel wird die Funktion korrekt abgebrochen, sodass der Stapelspeicher nicht überlastet wird.


Tipps für Profis

  • Optimierung des Codes: Überprüfe regelmäßig deinen Code auf unnötige Aufrufe und überflüssige Variablen. Ein gut strukturierter Code spart nicht nur Zeit, sondern auch Ressourcen.

  • Modularität: Halte deinen Code modular und vermeide unnötige Abhängigkeiten zwischen Prozeduren. Dies kann helfen, den Überblick über den Stapelspeicher zu behalten.

  • Testen in unterschiedlichen Versionen: Teste deinen VBA-Code in verschiedenen Excel-Versionen, um Kompatibilitätsprobleme zu vermeiden.


FAQ: Häufige Fragen

1. Was bedeutet "nicht genügend Stapelspeicher"?
Das bedeutet, dass der verfügbare Speicher für die aktuellen Prozeduraufrufe erschöpft ist, häufig aufgrund von zu vielen rekursiven Aufrufen oder verschachtelten Funktionen.

2. Wie kann ich den Stapelspeicher in Excel VBA optimieren?
Reduziere die Verschachtelung von Prozeduren, verwende Static-Variablen und optimiere die Deklaration von Variablen, um den Speicherverbrauch zu minimieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige