HERBERS Excel-Forum - das Archiv

Thema: Excel kein Speicher !

Excel kein Speicher !
norbert
Guten Tag allerseits,
ich habe nur eine Datei auf.
Die Datei hat 733KB, plötzlich kommt: nicht genügend Speicher.
Mein Laptop hat 32 GB ! Office 32 Bit
Und es stürzte dann Excel ab,
WARUM ?

mfg norbert
Warum?
RPP63
Moin!
Die Frage nach dem warum lässt sich sehr einfach beantworten:
Es liegt an Deiner Datei …
"Etwas" genauer:
Formeln und Formatierungen (auch bedingte) grätschen dazwischen.
Wird VBA eingesetzt?
Kannst Du die Datei hier (anonymisiert) hochladen?

Gruß Ralf
AW: Excel kein Speicher !
Onur
Wahrscheinlich hast du eine Endlosschleife in einem deiner Makros eingebaut.
AW: Excel kein Speicher !
Onur
Wahrscheinlich in einem Change-Event.
Wie kann man die Endlosschleife finden
norbert
Hallo zusammen,
wie kann ich die Endlosschleife finden ?


mfg norbert
Die kannst du...
Case
Moin :-)

... z. B. mit Haltepunkten (F9) finden: ;-)
https://learn.microsoft.com/de-de/office/vba/language/how-to/set-and-clear-a-breakpoint

Servus
Case
AW: Wie kann man die Endlosschleife finden
Yal
Hallo Norbert,

vielleicht wird Onur schneller sein...

Wenn Du Ereignisprozedure einsetzst, kann es vorkommen, dass Du damit eine Aktion anstosst, die selbst eine Ereignisprozedure auslöst. Diese Neuauslösen sieht in VBA-Editor, als ob die Procedure wieder am Anfang startet, aber in Realität eine ganze neue Verarbeitung startet. Die bisherige Verarbeitung wird auf dem Staple gelegt (ein spezielle Speicher-Konstrukt im CPU) und die neue dann drauf, und wieder die neue, und wieder die neue, usw. bis Stapel voll ist und dann Excel abstürzt.

Beispiel:
Private Sub Worksheet_Change(ByVal Target As Range)

Range("A1") = 1 'hier wird in der Zelle A1 geschrieben, was ein Worksheet_Change auslöst
End Sub


Lösung: Ereignis ("Events") nicht erlauben:
Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False 'Events blockieren
Range("A1") = 1
Application.EnableEvents = True 'nicht vergessen, Events wieder zu erlauben
End Sub


VG
Yal
Müßte geklärt sein -)
norbert
Hallo zusammen,
ich habe das von Yal durchgeführt.
Habe hier:
Public Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False

am schluß eingesetzt.
Application.EnableEvents = True
bis jetzt alles i.o., ich hoffe das es das war.
Zusätzlich hatte ich diese Datei: DatePicker.xll
im Verzeichnis: C:\Users\Norbert\AppData\Roaming\Microsoft\Excel\XLSTART

DANKE an ALLE !

gruß norbert


AW: Müßte geklärt sein -)
Yal
Hallo Norbert,

ich habe den Beispiel mit Worksheet_Change, könnte aber auch mit
Worksheet_SelectionChange und darin der Auswahl einer andere Zelle,
Worksheet_Activate / Worksheet_Deactivate und Wechsel zwischen Blätter,
usw.

Anders gesagt: prüfe alle deine Event-Prozeduren.

Immer ist es zu denken: ich fange den Event ab, aber löse ich darin einen Event aus?

VG
Yal

Change-Event
RPP63
Da der TE ja seine Mappe nicht zeigen mag:
Ganz so einfach ist es ja nicht mit dem stackoverflow …
"Normalerweise" wertet man in einem Change ja das Target aus.
Simpelst-Variante:
Private Sub Worksheet_Change(ByVal Target As Range)

Target = 1
End Sub

Hier kommt es nicht zu einer Endlosschleife!
Egal, was man in eine beliebige Zelle einträgt:
Der Wert wird einmalig in eine 1 geändert.
Danach folgt keine Änderung mehr, weswegen das Change auch nicht mehr getriggert wird.
Deshalb brauchen die Events auch nicht abgeschaltet zu werden.

Gruß Ralf
AW: Change-Event
Onur
Hallo Ralf,

Wie kommst du denn da drauf ????
Solltest du auch mal testen....
Wenn du in den VBA-Editor gehst, siehst du, dass du auf Pause klicken kannst, da der Code läuft und läuft und läuft und läuft .....(auch wenn er keinen Stapelspeicherfehler generiert).

Gruß
Onur
testen?
RPP63
Selbstverständlich habe ich das getestet, Onur!
Bei mir unter Excel 365, aber mein Hinweis galt imo schon immer.

Vielleicht noch ein wichtiger Zusatz:
Mittels F8 stept man tatsächlich endlos.
Dies passiert auch beim Setzen eines Haltepunkts und F5
Das "reine" Change ohne Haltepunkt endet hingegen augenblicklich.
Ich habe in meinem Fundus einige Dateien, wo ich bewusst auf EnableEvents verzichte.

Gruß Ralf
AW: testen?
Onur
Wenn du mal ein Modul anlegst , dort x als PUBLIC deklarierst und im Change-Event das hier nimmst:
Private Sub Worksheet_Change(ByVal Target As Range)

Target = 1
x = x + 1
End Sub

siehst du im VBA-Editor im Überwachungsfenster, dass x den Wert 46 hat. Dass heisst, dass der Code 46x läuft, bevor Excel die Notbremse zieht.
Ich kann dies so nicht ....
norbert
Hallo Onur,
tut mir leid, ich kann das so nicht.

Vielleicht kannst Du das mal aufzeichnen,
würde mich freuen.

gruß norbert
Höchst interessant!
RPP63
Das kann ich so bestätigen, Onur!
Bei 42 hätte ich ein easter-egg vermutet, aber ausgerechnet 46?

Danke jedenfalls für den Tipp mit der globalen Variable nebst Überwachungsfenster!

Gruß Ralf
AW: Ich kann dies so nicht ....
Onur
DU bist doch gar nicht gemeint gewesen.
AW: Ich kann dies so nicht ....
Onur
Hi "norbert",

Wenn du schon die Datei nicht posten willst, dann poste doch mal wenigstens alle Event-Makros - sonst kann dir auch Niemand helfen.

Gruß
Onur
AW: Die kannst du...
norbert
Hallo Case,
die Datei benutzen mehrere Kollegen, abwechselnd.
Ich weiß garnicht im welchen Modul sich die Endlosschleife befindet.

gruß norbert