Onvoldende geheugen

Status
Niet open voor verdere reacties.

Bram65

Gebruiker
Lid geworden
25 feb 2023
Berichten
45
Beste experts,
Ik krijg bij het starten van een macro een foutmelding: Onvoldoende geheugen.
Ik heb 1 laptop plus 1 PC die boven staat.
Laptop heeft I7 processor met 16GB RAM en grote SSD schijf
PC heeft I5 aan boord met 12GB RAM en ook SSD schijf
Beide draaien met W10 icm Office 2016

Ik heb op de laptop enkele macro's geprogrammeerd, het workbook is 5.29MB groot.
Nadat ik daarin wijzigingen heb aangebracht en het workbook op de laptop heb opgeslagen in een gedeelde map, sluit ik Excel af.

Ik ga naar boven en start de PC op en open vanaf daar het workbook vanaf de netwerklocatie.
Dat gaat allemaal goed. Ik dubbelklik op een cel en er wordt een userform geopend met veel data in labels verwerkt.
Ook een knop om de macro te starten.
Zodra ik daarop klik krijg ik de foutmelding: Onvoldoende geheugen, zelden gaat het meteen goed.
Excel wordt afgesloten en opnieuw opgestart met aan de bestandsnaam 'Hersteld' toegevoegd.
Wanneer ik in geen enkele cel iets wijzig maar meteen dat herstelbestand op de netwerklocatie opsla, het originele bestand een andere naam geef en dit herstelbestand de originele naam geef, en het vandaf de PC opnieuw opstart gaat het wel goed na het klikken op de knop.

Wanneer ik op de laptop wijzigingen in de code heb aangebracht en heb opgeslagen en ik start daarna de PC op om het workbook te openen zonder op de cel te dubbelklikken maar ik open de VB editor om de code te wijzigen en ik sla dat op de laptop netwerklocatie op, dan gaat het wel meteen goed wanneer ik dat workbook meteen erna open en de macro start.

Ik ben al een hele tijd bezig om dit uit te pluizen maar krijg het niet gevonden.
Internet staat bol van deze foutmelding maar ik vind geen oplossing.
Allemaal zonder resultaat.

Het lijkt wel of bij het opslaan vanaf de laptop er iets mee wordt weggeschreven naar die file, iets laptop gerelateerd, waar de PC geen raad mee weet.
Lijkt me ook dat het niet in de code zit, dan zou het ook op de laptop fout gaan lijkt me.

Het is een workbook met veel gevoelige data dus ik kan hier niet plaatsen.
Heeft iemand een idee waar dit aan kan liggen?

Ik heb al met minimaal aantal sheets getest, in het register enkele mappen Excel verwijderd om de instellingen te resetten, en nog wat dingetjes die ik heb gelezen op het web.
Mocra geschreven die op sheets van voorgaande jaren in de cellen met een formule, de cel-value vervangt door de uitkomst van de formule en daarna die formule verwijderd.

Wanneer de macro wel normaal zijn ding doet geeft Taakbeheer aan dat 32% van het geheugen gebruikt wordt.
Dat is dus incl Chrome, Virusscanner, Windows en drivers e.d. en ja ook het workbook.

Kijk ik wanneer het workbook is afgesloten dan staat dat op 29%. Hoezo, Onvoldoende geheugen!

Ik hoop dat iemand me kan helpen.
groet Bram
 
Zonder je document en macro's te zien is daar naar mijn mening niet veel over te zeggen.
Heb je ook WORKSHEET_CHANGE macro's?
 
Heb je op de schijven wel een chkdsk /f en sfc /scannow uitgevoerd? Heb je de schijven geoptimaliseerd?

Schijven optimaliseren
Schijven defragmenteren en optimaliseren (SSD's).

- Ga naar > Zoekvak (icon vergrootglas = zoeken naar)
- Typ > Station
- Kies > Stations defragmenteren en optimaliseren
- Kies > Gewenste optie

Is er verschil tussen 32-bits en 64-bits uitvoering?
 
Laatst bewerkt:
Hoi Bram,

Inderdaad zonder een voorbeeld is het maar gissen.
Heb het vermoeden dat je VBA code de boosdoener is.
Kan een repeterende aanroep van een Functie zijn die dan in een Loop komt.

Je kunt foutcontrole gebruiken in VBA, weet niet hoe groot de code is?
maar je kunt de code stap voor stap doorlopen en kijken waar het fout gaat.
Of je zet op bepaalde plekken een onderbrekingscode, en dan de code uitvoeren.

Omdat je vanwege de gevoeligheid niet het bestand kunt posten, blijft het koffiedik kijken
 
Onderstaande heb je al gehad?
1. Download the Latest Windows Updates
2. Always run the program as an administrator
3. Sluit niet essentiële achtergrondprogramma's
4. Controleer de add-ons
5. Beveiligingsprogramma's kunnen bepaalde Excel-services blokkeren
6. Download de laatste Microsoft Office updates
7. Repair Microsoft Office
8. Schakel Cortana uit
9. Open Excel in Safe Mode, add-ins kunnen het probleem veroorzaken
10. Kijk de instellingen in het vertrouwenscentrum na
11. Wijzig de Dynamic Data Exchange Settings
uncheck the Ignore other application that use Dynamic Data Exchange (DDE) box.

12. Use the 64-bit version of Excel
The 32-bit version of Microsoft Excel has a is 2 GB limitation. So, if the processes require more than 2 GB, Microsoft excel will run out of memory and the error message will appear.
Moving to the Microsoft Excel 64-bit version provides more space and will thus solve any memory-related issues you may have with the application.
 
Laatst bewerkt:
Begin met het uitschakelen van de virusscanner.
Check vervolgens in de VBEditor de references onder 'tools'.
 
Wow, allemaal dank voor jullie reactie, ik zal ze een voor een beantwoorden.
WORKSHEET_CHANGE macro's heb ik niet gebruikt.
Later vanfaag zal ik de schijven op beide systemen defragmenteren.
Wanneer het aan de code zou liggen en de macro in een repeterende loop zou komen, zou dit toch ook op de laptop zo zijn?
Bovendien gaat het soms, maar dat is slechts zelden, wel goed. Maar ik zal dat nogmaals goed nakijken en testen.
Vreemd vind ik dus wanneer ik het workbook op mijn PC, vanaf de laptop open en onmiddellijk weer op die laptop opsla, het probleem dan niet optreed.
Mocht toch blijken dat het aan de code ligt, zal ik dat hier ook melden. Voel me daar niet te groot voor.
Ik heb de laatste updates voor Windows en Office geinstalleerd.
Ik ga straks het programma als administrator uitvoeren, niet eerder gedaan.
Achtergrondprogramma's draaien er eigenlijk niet, de laptop is voor algemeen gebruik maar de PC waar de problemen optreden, wordt uitsluitend gebruikt voor dit workbook.
Er staat alleen Chrome op en Excel met Office hulpprogramma's.
Geen virusscan omdat ik op die PC uitsluitend een vertrouwde website gebruik van Kinomap. (trainingsprogramma voor gebruik bij sporten met hometrainer)
Dus die PC is zo 'kaal' als mogelijk. Tijdens dit typen bedenk ik me dat ik die PC natuurlijk erg snel opnieuw kan installeren, dus de C: partitie formateren.
Overigens realiseer ik me nu ook dat ik geen virusscan gebruik maar ik heb nooit gekeken wat Defender van Windows doet.
Microsoft Office heb ik al eens gerepareerd, zelfs Excel verwijderd en opnieuw geinstalleerd.
Cortana stond NIET uit, nu wel.
Excel in safe mode gestart ook nog niet getest, kan ik later nog proberen.
Vertrouwenscentrum heb ik dus teruggezet naar standaard instellingen door in het register enkele Excel mappen te verwijderen.
De instellengen waren nadien teruggezet maar geen oplossing.
Toen de netwerklocatie toch maar weer als vertrouwd beschouwen en macro's automatisch starten toegestaan, niet aanbevolen maar ik heb die zelf geschreven en zijn dus vertrouwd.
Wijzig de Dynamic Data Exchange Settings had ik ook al gelezen en gedaan maar dan krijg ik een grijs scherm wanneer ik het workbook open.
Mijn Office is een 64bit versie dus de grootte van het workbook speelt geen rol.
Als laatste de refences in de VBeditor zal ik ook nog eens induiken.

De betreffende macro is een uitgebreid en complex dingetje, ik zal proberen het in het kort te omschrijven.
Ik gebruik dus Kinomap tijdens sporten met mijn hometrainer, ik heb daar een lifetime account gekocht.
Ik open het workbook, per sheet (jaartal) staan mijn resultaten en daarop worden berekeningen uitgevoerd.
Wanneer ik op een cel klik van een bepaalde kolom, wordt de macro aangeroepen, en nu wordt het complex.

Dat klikken doe ik in een cel met daarin een titel van een video die ik wil gaan rijden.
Twee cellen verder staat de URL van die video, die lees ik in en open die website middels Chrome browser welke verborgen blijft.
Ik lees dan enkele gegevens van die site in en zet die gegevens in labels van een inmiddels Loaded maar onzichtbaar Userform.
Daarna wordt het SJON bestand van die video ingezelezen met daarin alle data van die video.
Die data zet ik op een appart sheet. Dat betreft stijging/daling percentage incl de tijdstippen waarop dit gebeurt, de afgelegde meters per seconde, de snelheid van de rijder per seconde en zo nog enkele dingen.
Die data wordt gedeeltelijk in labels gezet en die labels worden tijdens het rijden per seconde, geupdate.
Ik gebruik dit workbook al enkele jaren en dat is altijd goed gegaan maar nu is het mogelijk te groot geworden.
Ik gebruik bij die PC twee schermen, 1 voor Excel userform1 en de ander monitor voor het afspelen van de video met onderin het scherm userform2.

Dit is in het kort wat ik doe.
Dit is zo'n video. Tijdens sporten wordt deze full screen afgespeeld.
https://videos.kinomap.com/en/watch/24nekz
En mijn userforms zien er dan alsvolgt uit.

Bekijk bijlage 369749

Bekijk bijlage 369750

In dit laatste userform is het linker blok altijd de actuele situatie waarbij de tijd afloopt naar nul, de overige 3 schuiven naar links wanneer nul is bereikt en de vierde wordt dan opnieuw gevuld mocht dat aanwezig zijn.

Ik ga later vandaag al jullie geboden adviezen nalopen en kijken wat het oplevert.
Nogmaals dank allemaal.

gr Bram






 
Dergelijke bijlagen werken niet. Je moet bestanden altijd via de Paperclip uploaden > Rechtsonder klik Ga geavanceerd en klik de Paperclip etc.

SSD's defragmenteer je niet, maar is dat optimaliseren (getrimd).
Heb je Cortana uitgeschakeld?

Een energiebeheerschema kiezen of aanpassen
Typ Energiebeheer in het zoekvak. Geavanceerde energie-instellingen wijzigen > Kies > Hoge prestaties > controleer de instellingen. = C:\Windows\System32\powercfg.cpl = Een energiebeheerschema kiezen of aanpassen.

Bijgaand de links:

How to Fix the “Not Enough Memory to Run Microsoft Excel” Error on Windows

How to Fix the “Not Enough Memory to Run Microsoft Excel” Error in Windows
 
Laatst bewerkt:
Als je application.ontime in VBA gebruikt loop je een oneindige looprisico.
 
Dank voor jullie reactie.
De bijlage gaan hier wel goed, als ik erop klik krijg ik een frote afbeelding te zien, maar ik zal het hieronder nogmaals proberen middels de paperclip.
De SSD schijf is nu inderdaad geoptimaliseerd maar dat gaf de oplossing niet. Cortana was al uitgeschakeld op de PC, op de laptop heb ik dat vandaag gedaan. Zonder resultaat.
Ook het virtueel geheugen handmatig aangepast.
Al weer van alles geprobeerd maar geen resultaat.
Het enige resultaat dat ik krijg is zodra die foutmelding komt en er een HERSTEL bestand wordt geopend, dat bestand op te slaan en te renamen naar de originele titel.
Dan opnieuw opstarten vanaf de PC, dus via netwerk, en dan gaat alles wel goed.
Het werkt dus wel, alleen pas NADAT er een herstelbestand is gemaakt.
En nu zou ik graag willen weten wat er in dat herstelbestand anders is dan in het origineel.

Maar goed, ik heb nog genoeg om te proberen, nu is daar ook het energiebeheer bijgekomen.
De twee linken die werd gegeven duik ik ook nog in.

In de macro wordt Application.ontime niet gebruikt.
Om exact een 1-seconde lus te krijgen waarbij de tijd die nodig is door de code wordt verrekent gebruik ik

Code:
         Endtick = GetTickCount
         Do
             blablabla... de code dus
            DoEvents
         Loop While (Endtick + 999) >= GetTickCount
         'nu krijg je exact 1 seconde loop ongeacht de tijd die door de code wordt gebruikt
         'sleep en wait leveren beide een geringe afwijking op wat op 1 heel uur toch wel kan oplopen

Een suggestie die eerder werd gedaan getest maar in een snelkoppeling naar een workbook kan ik geen aanpassing maken dat dit als administrator wordt uitgevoerd, wel wanneer ik Excel.exe naar het bureaublad kopieer.

Nu de afbeeldingen nog maar eens proberen.
 

Bijlagen

  • Form2.JPG
    Form2.JPG
    68,3 KB · Weergaven: 30
  • Form1.JPG
    Form1.JPG
    216,9 KB · Weergaven: 27
Laatst bewerkt:
Je maakt gebruik van een API voor de timer ?
 
Ja, deze Private Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
Maar ik denk gevonden te hebben wat het probleem veroorzaakt, hoewel ik dit al jaren zo gebruik.
Wanneer ik in de code enkele regels rem door er ' voor te zetten dan lopt die wel door en krijg ik de foutmelding niet.
Het princiepe is dus dat userform1, de grote van de twee, op het ene scherm staat en de video met userform2 op de tweede monitor.
Ik klik op 'Start' van userform1. Ik sta dus bij de PC, loop naar de hometrainer en begin te trappen. De video zal dan in beweging komen.
Het betreft dus een interactief gebeuren.
Nu de video in beweging is gekomen beginnen ook de tellers op userform1 per seconde te wijzigen. Dat doe ik met de API GetPixel.
Private Declare PtrSafe Function GetPixel Lib "gdi32" (ByVal hdc As LongPtr, ByVal X As Long, ByVal Y As Long) As Long

De macro 'kijkt' elke seconde naar 3 vaste pixels van de monitor waarop de video afspeelt.
Zijn die 3 pixels de vorige seconde gelijk aan de huidige dan staat het beeld stil en moeten de tellers van userform1 ook stoppen.
Begin ik weer te trappen dan gaat de video weer verder, beweging wordt gedetecteerd en de tellers van userform1 gaan ook weer verder.
Dit werkt al jaren naar behoren zonder foutmeldingen.

Maar omdat ik sinds kort userform2 met veel labels erbij heb gemaakt, lijkt het nu allemaal wat te veel te worden.
Elk gekleurd blokje van die gekleurde balk is een label waarvan de breedte wordt bepaald door de tijd tussen twee percentage-wissels.
 
Laatst bewerkt door een moderator:
Ligt niet aan GetTickCount en ook niet aan de function GetPixel.
Ik snap er niets meer van.
Alles is up-to-date.
Van alles al getest zoals hierboven werd aangegeven, de twee linken had ik eerder al gevonden.
Zelfs de sub opgesplitst naar meerdere kleine.
Ook de lus met daarin GetTickCount vervangen door Wait, hoewel ik GetTickCount al lange tijd gebruik en nooit problemen gaf.
Met F8 door de code en als die eruit klapt lijkt het willekeurig momenten te kiezen.

En nog steeds, nadat Excel er dus uitklapt en een herstelbestand wordt geopen, en ik dat herstelbestand opsla zonder ook maar iets in het workbook te wijzigen, om het daarna opnieuw te openen, gaat alles wel goed.
Mocht het een geheugenprobleem zijn, waarom dan niet meer met dat herstelbestand.
Mocht het aan de code liggen waarom dan wel problemen op de PC en niet op de laptop.

Na weken het web afspeuren, lezen en kl**ien ben ik het een beetje beu aan het worden.
het werkt dus allemaal wel, alleen moet je extra handelingen doen tijdens opstarten van het workbook, hetgeen niet zou moeten hoeven.

Ik kan natuurlijk ook wanneer ik wijzigingen wil aanbrengen, dat op de PC doen en niet op de laptop.

 
Laatst bewerkt:
Volgens mij heb je de VBA referenties nog niet gecontroleerd op 'missing'.
 
Volgens mij heb je de VBA referenties nog niet gecontroleerd op 'missing'.

Geeft me weer moed!

Ik denk dat je dit bedoelt, lijkt me dat dit goed is.
gr Bram
 

Bijlagen

  • Referenties VBA.JPG
    Referenties VBA.JPG
    44,6 KB · Weergaven: 27
Laatst bewerkt:
Ja, dat bedoel ik.
Is dit de weergave op je laptop ?
 
Hallo snb, ja dat is van de laptop maar juist gekeken en op de PC was het exact hetzelfde.
In dit workbook zit een WindowsMediaPlayer, die heb ik eruit gesloopt om te kijken of die veel geheugen verbruikt.
Daarbij had ik ook een timer gemaakt die het label op userform1 update wanneer een andere MP3 wordt afgespeeld, titel en artiest komen dan in het label in form1.
Zonder resultaat, dus de backup maar weer terug gezet.
Ook in de Nvidia het videogeheugen verzet naar CPU, daarna Gforce en daarna op Auto, maakt geen enkel verschil.

Dadelijk ga ik die PC opnieuw installeren, alles eraf en beginnen met schone installatie door Windows 10 er op te zetten.
Zoveel staat er op die PC niet op, wordt enkel gebruikt voor sporten icm Kinomap. Betreffende workbook dus.
 
Hoi Bram,

Inderdaad zonder een voorbeeld is het maar gissen.
Heb het vermoeden dat je VBA code de boosdoener is.
Kan een repeterende aanroep van een Functie zijn die dan in een Loop komt.

Inderdaad zat er in de code iets niet goed, snap alleen niet dat het dan op de laptop wel ging en op de PC niet.
In een lus werd bij elke ronde de actuele datum in een string gezet, dat gebeurt nu eenmalig net voordat de lus start.
Weken mee bezig geweest maar wel weer veel van geleerd door op het web te lezen en adviezen die hier zijn gegeven, op te volgen.

Allemaal dank voor het meedenken, fijn weekend.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan