Snelheid van de macro

Status
Niet open voor verdere reacties.

Breuk132

Gebruiker
Lid geworden
6 jan 2010
Berichten
97
Hallo,

Ik heb een vreemd probleem met de uitvoersnelheid van macro's in excel.
Maakt niet uit hoe simpel de macro is, hij is altijd traag.
Maar wanneer ik de macro onderbreek en beëindig en nogmaals start, dan is hij in een keer veel sneller. Vervolgens heb ik de hele dag geen last meer van trage macro's, totdat ik de volgende dag alles weer opstart.

Heeft iemand enig idee waar dat aanligt en hoe je dat kan voorkomen?
Zonder dat je elke dag eerst een macro moet laten lopen, Om vervolgens de marco te onderbreken en opnieuw te laten lopen.

Mvg,
Jelte
 
Heeft niemand dit probleem eerder gezien? Lijkt me sterk dat ik de enige ben.

Zelfs met een simpele macro als:

Code:
Sub snelheid()

do until selection.row = 500
activecell.offset(1,0).select
loop

end sub

Is al duidelijk het verschil te zien.
Lijkt erop dat elke keer een "tijdelijk" geheugen vol zit, dat wordt gewist / geleegd zodra er een macro onderbroken en beëindigd wordt.
 
Het lijkt erop dat verwijzingen ontbreken.
Kijk in de VBEditor/menubalk/extra/verwijzingen

VBA en microsoft Excel (9.0, 10.0 of 11.0) Object Library moeten aangevinkt zijn.
 
Staan die ook aangevinkt als je nog geen macro hebt geaktiveerd ?
 
Beste lezer,

Met "application.enableevents = false" lijkt de macro even snel te werken als met het eerst onderbreken van een macro via beëindigen. Dus wat dat betreft lijkt het probleem opgelost.

Echter vraag ik me nog steeds af wat er nou in excel, dan wel VBA gebeurt met de instellingen of een of ander geheugen dat wordt geleegd. Waardoor de macro's in een keer zoveel sneller werken en sneller blijven werken, wanneer er een macro handmatig beëindigd wordt. Met "application.enableevents = true" wordt de snelheid weer een stuk lager.

In ieder geval alvast bedankt voor het meedenken. :thumb:
 
Dan heb je bljkbaar veel code staan in gebeurtenissen als Worksheet_Change of andere.

Het is sowieso verstandig macro's te beginnen met

Code:
application.screenupdating =False
Application.Calculation = xlCalculationManual
application.enableevents=false
application.displayalerts=false
en ze na afloop weer 'aan' te zetten.
 
Dan zullen die in de invoegtoepassingen zitten. Want in een lege spreadsheet met enkel de macro die ik in een eerdere reactie heb gegeven is ook al erg traag.
Screenupdating en displayalerts gebruikte ik al eerder, enableevents sinds vandaag :), al heb ik nog niet helemaal door wat die nou precies allemaal uitschakelt. Nog geen goede beschrijving gevonden in help functie of google.

Bij open uitzetten en bij sluiten werkt niet wanneer je bijv. meteen een userform wilt showen.

En blijf ik met de vraag zitten, waarom dan wel zo snel als je eerst bijv de eerder genoemde macro beëindigd???? Worden dan de events allemaal uitgeschakeld ook die van de invoegtoepassingen? Blijf dat vreemd vinden.
 
Hoi snb,

Probleem zit 'm inderdaad in de invoegtoepassingen die elke keer standaard worden ingeschakeld bij het openen van Excel. Betreft een invoegtoepassing van Exact, die nogal wat macro's bevat.

Blijkbaar worden deze uitgeschakeld bij het onderbreken van een macro. Wanneer ik dat doe dan werken de functie's daarvan ook niet meer. Moet ik maar wat bedenken dat deze toepassingen alleen worden ingeschakeld als ik ze nodig heb. En wat vaker werken met

Code:
application.enableevents = false
application.enableevents = true

in ieder geval bedankt voor het meedenken. :thumb:
 
Laatst bewerkt:
Waarom niet de invoegtoepassing van Exact bij starten van Excel standaard uitschakelen en alleen maar inschakelen als je hem nodig hebt ?
 
Voor mij persoonlijk niet zo'n probleem. Echter zijn er nog al wat excel-bestanden die ik voor mijn collega's heb gemaakt en die zijn een stuk minder bekend met VBA, dus die wil ik niet belasten met het handmatig in- en uitschakelen van invoegtoepassingen.

Enige optie zou zijn, wanneer de invoegtoepassing van Exact met een macro in- en uitgeschakeld kan worden. Geen idee of dat mogelijk is.
 
Zet bij Workbook_Open
Code:
AddIns("naam v/d invoegtoepassing").Installed = False
en dan als nodig in je macro
Code:
AddIns("naam v/d invoegtoepassing").Installed = True
 
Het automatisch uitzetten van de invoegtoepassing zal niet zo'n probleem zijn. Aanzetten wordt een groter probleem aangezien de betreffende invoegtoepassing beveiligd is.
Maar in ieder geval bedankt voor de tip. Ik zal maandag even het eea proberen. :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan