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
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
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
Moin,
der Fehler ist (natürlich wie von Geisterhand) nicht wieder aufgetreten, deswegen mach ich mal einfach zu.
Gruß
Doming