VBA-Fehler: Nicht genügend Speicherplatz

869
PeterH

Ich habe ein sehr einfaches Makro in einem Excel-Arbeitsblatt, um Benutzern die Neuberechnung zu ermöglichen.

Ich habe keine anderen Makros / Code in der Arbeitsmappe, und nur dieses Arbeitsbuch ist geöffnet

Sub Calculate() Calculate End Sub 

Dies wird durch eine Schaltfläche aktiviert.

Beim Drücken bekomme ich jedoch zwei Fehlerfelder, siehe Bild.

Was tut Out of stack space mean? Und wie löse ich dieses Problem? VBA-Fehler: Nicht genügend Speicherplatz

Ich habe auf dieser Website gesucht:

https://docs.microsoft.com/de-de/office/vba/language/reference/user-interface-help/out-of-stack-space-error-28

Es heißt, ich habe zu viele Funktionen? Dieses Makro hat bisher gut funktioniert, und es macht kaum eine Menge, daher kann das Problem nicht verstanden werden.

Ich kann das Blatt mit der Option unter der Registerkarte "Formeln" berechnen.

0
Sie haben eine Wiedereintrittsfunktion geschrieben, die sich bedingungslos aufruft, ohne die Bedingungen einzuschränken, sodass der Stapel mit den wiederholten Aufrufen gefüllt wird. Was möchtest du erreichen? AFH vor 5 Jahren 0
Bei @AFH muss das Makro nur das Blatt berechnen, ein Benutzer gibt ein neues Datum ein und drückt dann auf die Aktualisierungsschaltfläche, um das Ergebnis erneut zu berechnen. Der Benutzer ist möglicherweise nicht mit Excel vertraut, daher habe ich das Makro / die Schaltfläche verwendet, da Sie es dann nicht übersehen können. PeterH vor 5 Jahren 0
Ohne den zugrunde liegenden Code zu sehen, wäre es schwierig, eine endgültige Antwort auf die direkte Ursache zu geben, da es einige Gründe geben kann - rekursive Funktion, Variablen, die zu viel Speicher benötigen. Gemäß Ihrer Verknüpfung ist der Stapel ein Bereich des Arbeitsspeichers zugeordnet, und wenn Sie Ihr Makro ausführen, werden die Variablen und Aufrufe, die es macht, auf den Stapel "verschoben". Wenn eine Funktion oder Variable nicht mehr benötigt wird, wird sie aus dem Stapel entfernt, wodurch Speicherplatz freigegeben wird. Der Fehler weist darauf hin, dass Ihr Makro möglicherweise den zugewiesenen Speicher für den Stapel überschreitet. Enigman vor 5 Jahren 0
@Enigman Der einzige Code, der im Dokument verwendet wird, wird in der Frage angezeigt. Ich habe keine anderen Makros. Deshalb bin ich so verblüfft. PeterH vor 5 Jahren 0

2 Antworten auf die Frage

3
AFH

Die von Ihnen definierte Funktion ist rekursiv und ruft sich bedingungslos auf, bis der Stack mit allen Aufrufen gefüllt ist.

Sie sollten den Namen Ihrer Subroutine ändern, zB: -

Sub Calc() Calculate End Sub 

Wenn Sie Calc()auf die Schaltfläche verweisen, vermeiden Sie Rekursionen.

Dies hat das Problem gelöst, danke!, immer noch etwas verwirrt, da das Problem erst heute begann und in den letzten Wochen gut funktionierte. PeterH vor 5 Jahren 0
Ich kann nicht erklären, wie es vorher funktioniert hat, es sei denn, eine andere Revision behandelte die Anrufe anders. AFH vor 5 Jahren 0
2
Enigman

Sie nennen Calculate in Calculate. Jeder Aufruf von Calculate verursacht einen weiteren Aufruf von Calculate, der dann Calculate aufruft. Dann wird der Fehler schließlich angezeigt, wenn der Stack voll ist.

also die berechnungsfunktion im code, veranlassen mein makro auch neu zu berechnen? Ich verwende dasselbe Makro in anderen Arbeitsmappen problemlos PeterH vor 5 Jahren 0
@ PeterH: Vielleicht hatten Sie bisher Glück, dass es sich vorher nicht manifestiert hatte. Möglicherweise war zu anderen Zeitpunkten mehr Speicherplatz auf dem Stack vorhanden - diesmal waren möglicherweise mehr Apps auf der Workstation ausgeführt worden oder es war eine längere Zeit zwischen Neustarts der Workstation. Deshalb müssen wir bei der Verwendung von Namen für Module und Funktionen vorsichtig sein, da die Verwendung eines reservierten Wortes oder eines eingebauten Funktionsnamens uns später beissen kann, wie dies in dieser Situation der Fall war. Enigman vor 5 Jahren 0
Vielen Dank für Ihre Hilfe, ich wusste nicht, dass der Name einer Funktion wirklich wichtig war, um ehrlich zu sein PeterH vor 5 Jahren 0