Optimaliseren VBA-code en nuttige tips.
Voor het uitvoerren van modules, functies en sub routines reserveert Access geheugen ruimte volgens de zogenaamde 'call-tree loading' methode.
Dit betekent dat indien functie A in module 1 gebruikt maakt van een functie B in module 2 die op zijn beurt de functie C aanroept van
module 3 dan zal Access de drie modules inladen in het geheugen.Indien functies verwijzen naar publieke variabelen zal ook deze module
ingeladen worden.
Het is dus zinvol om functies die zich op elkaar beroepen in één module onder te brengen.
In Access 2010 is aan dit probleem tegemoet gekomen, Access compileert nu de modules (compile on demand) ipv 'call-tree loading' toe te passen.
Alvorens code kan uitgevoerd worden moet VBA de module compileren. VBA reduceert daarbij de module zodat de uitvoering sneller is. Zorg er voor dat alvorens de toepassing verspreid wordt dat alle modules gecompileerd zijn. Kan door het Debug menu in de VBA editor voor Compile te kiezen. Bovendien kan sedert de versie 2010 geopteerd worden Access op de achtergrond te laten compileren.
Gezien bij het gebruik van de toepassing Access voortdurend modules inlaadt beperk uw modules met die functies en sub-routines die daadwerkelijk ook gebruikt worden. Verwijder functies en routines die niet gebruikt worden.
Eens de toepassing volledig afgewerkt overweeg dan om er een *.accde (vroeger mde) versie van te maken, zodoende is men zeker dat de toepassing steeds gecompileerd blijft. Bovendien is ook de code niet leesbaar.
Gebruik Option Explicit, dit noopt er u toe variabelen uitdrukkelijk te dimensioneren en te declareren. Zoniet voorziet VBA het datatype die het meeste geheugen inneemt maar ook de grootste verwerkingstijd vergt.
Ga voor de kleinste datatype voor het dimensioneren van variabelen, kies niet voor long indien integer volstaat. Gebruik string variabelen van beperkte lengte wanneer mogelijk , vb Dim strVast As String * 10 , indien men er zeker van is dat lengte maximaal uit 10 karakters zal bestaan.
Wees specifiek bij het declareren van object variabelen, zo voorkomt men dat VBA zelf moet uitmaken met welk object het te maken heeft. Dus ipv Dim ctl as Control kies voor Dim ctlCmd as CommandButton als je weet dat het over commandeknoppen gaat.
In iedere applicatie zal men wel gebruik maken van vertrouwde en veel gebruikte Functies en Sub-Routines die men omwille van practische organisatie in welomlijnde modules onderbrengt. Daar is niet mis mee en is zelfs aangewezen. Wees er echter van bewust dat code die beroep doet op uitwendige functies trager verloopt als code waarde functie er een bepaald deel van is. Maar kies voor de eerste aanpak indien de tijdswinst minimaal is, wat meestal ook zo is.
Overweeg om bij operaties met recordsets gebruik te maken van Arrays (reeksen) waarij met gebruik maakt van de GetRow() methode van de Recorset om deze daarna te sluiten. MijnArray = rst.GetRows(rst.recordcount)
Gebruik zoveel mogelijk constanten, het maakt niet alleen de code leesbaarder, VBA verwerkt ze sneller.
Sluit en ledig variablen van recordsets en databases en objecten op het einde van de code : rst.close set rst = Nothing
Bij gebruik van de Select Case constructie streef er dan naar om de meest voorkomende items bovenaan de constructie te plaatsen.
Beperk het GoTo uitdrukking of statement. Bij veelvuldig (misbruik) gebruik kan de leesbaarheid en de efficientie van de code er onder lijden.
Voorzie alle code van een fout behandeling. Op deze site laat ik dit achterwege enkel om de bedoeling van de voorbeeld code scherper in beeld te brengen. In de code van mijn applicaties gebruik ik altijd een standaard fout-behandeling.
Men is nooit zeker dat gebruikers, in tekstvakken bijvoorbeeld, de juiste data zullen inbrengen. Wees daarop voorbereid er vermijd dat
uw toepassing erop vastloopt. Voorzie routines die de invoer controleren en de gebruiker zonodig op de fout wijzen.
Validatie van data
begint men best op tabel-niveau, maar geef aandacht aan voormelde routines.
Documenteer uw code zelfs al blijkt dit bij het schrijven ervan overbodig.Ik ben niet de eerste die na een tijdje bij het lezen van mijn eigen moeite heb om deze te begrijpen. Docmumenteren doe ik door commentaar regels in te brengen en door bovenaan de routine de bedoeling ervan te omschrijven, de datum van creatie en de dat van wijziging.
Pas bij het benoemen van objecten en variabelen consequent een benamings conventie toe. Het maakt de code leesbaarder en begrijpelijker.
hallo