Das Archiv des Excel-Forums

Stapelspeicher zu klein

Bild

Betrifft: Stapelspeicher zu klein
von: Peppi

Geschrieben am: 08.10.2003 20:45:27

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
Bild


Betrifft: AW: Stapelspeicher zu klein
von: Nepumuk
Geschrieben am: 08.10.2003 20:51:41

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


Bild


Betrifft: AW: Stapelspeicher zu klein
von: Hajo_Zi
Geschrieben am: 08.10.2003 20:52:24

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/



Bild


Betrifft: AW: Stapelspeicher zu klein
von: Michael Scheffler
Geschrieben am: 08.10.2003 20:53:57

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


 Bild