Nejste přihlášen/a.

Přihlásit se do poradny

 

VBA - out of memory

Od: trkonmkiheda® odpovědí: 3 změna:

Mám pole VyslMat, které má 24 sloupců a proměnlivý počet řádků.

V tomto poli se provedou všechny výpočty a teprve přepočítané pole se má vložit zpět do excelu (jinak se v buňkách nepočítá vůbec nic). Problém je v tom, že při zadání příkazu ListS.range("A2:X"&PocRadku).value= VyslMat to spadne na nedostatek paměnit (chyba 7) a to i v případě, že je tam relativně málo řádků (třeba 600). Nevíte prosím někdo, proč a co s tím?

Office 2021 (doma), Microsoft 365 v práci (chování stejné) 64 bit, oba počítače Ryzen 5, 16 GB RAM.

Děkuji

M. Hodek


doplněno 07.08.24 22:36:

Již vyřešeno, viz níže.

 

 

3 odpovědi na otázku
Řazeno dle hodnocení

 

 

hodnocení

0x
avatar pansvacinka

Tak je tam ňákej "memory leak".

Neošetřený cyklus, který plní paměť (třeba už nepotřebnými) daty.

Podíval bych se ve správci úloh co to dělá s pamětí po spuštění výpočtu.

 

ml1
hodnocení

0x

Napadá mě, jestli to nechce do každé buňky z té oblasti vložit celé pole VyslMat, což by bylo paměťově náročnější. Ale při 600 řádcích a zhruba 20 sloupcích by to nemělo snad mít takový efekt.

(Ani bych nemyslel, že jde takové přiřazení ("implicitní cyklus") ve VBA udělat, myslel bych si, že se to musí v cyklu buňku po buňce, takhle dohromady vím, že to umí Matlab a tam právě může vzniknout, co jsem popisoval, pokud nesouhlasí dimenze těch dvou polí (nebo to skončí chybou, že nesouhlasí dimenze). No ale moje zkušenosti končí u verze 2003.)

Co to zkusit s ještě menším počtem řádků, třeba 10 nebo 20, to už nemůže dát out of memory ani omylem. Případně zkusit to samé cyklem (dva vnořené cykly), to se dá aspoň krokovat.

Ještě před tím příkazem bych dal zarážku (breakpoint) a podíval se (ve watch window, česky tomu VBA říkal kukátko, to se mi moc líbilo), co je v tom poli VyslMat, jestli tam je, co si myslíte, že tam je a jestli to pasuje na cílovou oblast.

 

hodnocení

Díky za odpovědi, již vyřešeno. Problém byl někde úplně jinde, ač to hlásilo nedostatek paměti. Problém byl v jednom datu narození, kde byl překlep a místo 1980 tam bylo 1880...

 

 


 

 

 

Přihlásit se k odběru odpovědí z této otázky:

Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz.

Používáním poradny vyjadřujete souhlas s personifikovanou reklamou, která pomáhá financovat tento server, děkujeme.

Copyright © 2004-2025 Poradna Poradte.cz. Všechna práva vyhrazena. Prohlášení o ochraně osobních údajů. | [tmavý motiv]