Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Fehler 28 - Nicht genügend Stapelspeicher

Begonnen von Doming, Mai 28, 2025, 09:19:10

⏪ vorheriges - nächstes ⏩

Doming

Hallo,

ich habe obigen Fehler nach Bearbeitung einer älteren Db erhalten.
Unter anderem schreibt die Hilfe ,,Sie haben zu viele aktive Function-, Sub- oder Property-Prozeduraufrufe."

Ich habe folgende Funktion geschrieben, um mir etwas Tipparbeit zu ersparen:
Public Function IstGeladen(Formelar as string) As Boolean
   IstGeladen = CurrentProject.AllForms(Formelar).IsLoaded
End Function

An dem IstGeladen hängt sich der Code nun mit dem Fehler 28 auf. Nehme ich stattdessen das ...Isloaded, läuft der Code durch.
Ich vermute mal, dass der Stapelspeicher schon vorbelastet ist und mein Aufruf nur das Fass zum überlaufen bringt.
Kann man den StapelSpeicher denn irgendwie zwischenzeitig wieder reduzieren/löschen, um die Ressourcen zu schonen?

Gruß
 Doming

Bitsqueezer

Hallo,

Formelar? Es muß doch "Fommela" heißen...Mensch... :)

Aber Deine Funktion ist in Ordnung, kein Problem.
Der Fehler kommt i.d.R. aus einer Rekursion. Wenn eine Funktion aufgerufen wird, legt VBA den Rücksprungpunkt auf einen Stapel. Damit es den "Weg nach Hause" findet am Ende der Ausführung der aufgerufenen Funktion.
Wenn diese wiederum eine weitere Funktion aufruft, kommt ein weiterer Rücksprungpunkt auf den Stapel. Wenn das in einer Endlos-Schleife, einer Rekursion usw. immer wieder passiert, ist irgendwann der Stapel voll und es wird abgebrochen (was gut ist, sonst würde sich Access aufhängen). Wenn die Funktion beendet wird, wird der letzte Wert vom Stapel genommen und an die Stelle nach dem Funktionsaufruf gesprungen, um dort weiterzumachen.

Es ist daher wahrscheinlich, daß Du hier irgendwo ein Namensproblem hast, vielleicht hast Du die Funktion "IstGeladen" schon anderweitig definiert. Einfacher Test: Benenne sie um in "IstGeladen2" und ebenso natürlich vor dem "=".

Gruß

Christian

Knobbi38

Hallo Doming,

ich finde, Christian hat das schon sehr gut erklärt. Tip für die Fehlersucher: typische Probanten für Rekursion ist immer wieder die falsche Verwendung von Dir() oder Fehlerbehandlungsroutinen. Verfolge mal den Programmablauf und in der VBE kannst du dir die Aufrufliste mit {STRG}{L} anzeigen lassen.

Gruß Knobbi38

Doming

Moin,
der Fehler ist (natürlich wie von Geisterhand) nicht wieder aufgetreten, deswegen mach ich mal einfach zu.
Gruß
 Doming