Structuur aanbrengen in een macro script is iets waar je in het begin van het leren van VBA erg goed op moet letten. Na verloop van tijd wordt het een automatisme. Er zijn een aantal vaste macro onderdelen die onmisbaar zijn. In dit artikel zal ik deze met jullie delen.
Inspringen in je macro
Als er iets onmisbaar is voor de leesbaarheid van je code dan is het wel inspringen. Inspringen is niet iets wat afgedwongen wordt binnen Visual Basic. Je kunt er ook voor kiezen om het helemaal niet te doen. Resultaat is dat je script een stuk lastiger te lezen is. Helemaal indien je binnen je script nog iets van genestelde For Next loops hebt staan. Door inspringen krijg je inzicht in de verschillende niveaus binnen je script. Ik zal een voorbeeld geven waarbij inspringen heel veel verschil maakt in leesbaarheid. De onderstaande code laat een deel zien van een script dat ik gebouwd heb. Eerst zal ik de code laten zien zonder dat er gebruik gemaakt is van inspringen.

Je kunt wel zien dat dit script redelijk lastig te lezen is. Vooral de dubbele For Next loop met het If statement erin vormt daarin een probleem. Laten we bekijken hoe dezelfde code eruit ziet indien er wel correct gebruik is gemaakt van inspringen.

Zoals je kunt zien zijn de verschillende niveaus binnen het script ineens een stuk duidelijker geworden.
Error Handling is één van de vaste macro onderdelen
Hoe goed je een macro ook hebt geschreven, er is altijd een kans dat je script op de één of andere manier fout loopt. Indien je niet wilt dat een gebruiker van het script een foutmelding met een foutcode ziet en naar de Visual Basic editor wordt gebracht dien je error handling toe te passen. Error handling is een vast onderdeel van een macro. Je voegt Error Handling toe door de volgende code te plaatsen ‘On Error Goto’ gevolgd door een stuk aaneengeschreven tekst. Deze tekst plaats ik dan altijd aan het eind van de code gevolgd door een dubbele punt. Wat deze code doet is dat op het moment dat je script vastloopt na je opening van je Error Handling hij doorschiet naar de locatie van de aaneengeschreven tekst gevolgd door dubbele punt. Je kunt dan de gebruiker netjes een msgbox laten tonen die aangeeft dat het script vastgelopen is en dat diegene contact met de bouwer op moet nemen of iets in die trend. Ik zal deze code voor de duidelijkheid hieronder voor je uitschrijven. Bij een run zonder error zal het script lopen van het begin tot de regel Exit sub. De gebruiker krijgt dan de msgbox niet te zien. Je ziet dat de ‘foutmelding:’ regel na de Exit sub staat waardoor het script over de Exit sub heen getild wordt als het ware en dan de msgbox laat zien.
Sub VoorbeeldErrorHandling()
    On Error GoTo foutmelding
     '------Uit te voeren code
    
Exit Sub
foutmelding:
    MsgBox "Onverwachte fout. Neem contact op met ......"
End Sub
Declareren van variabelen binnen een macro
Het declareren van variabelen is een onderdeel dat niet in elk geval verplicht is, maar wel zorgt voor een verbetering in performance. Je gaat dit effect pas echt merken bij enorme macro’s met heel veel bewerkingen erin. Om deze reden ben ik dan ook niet heel strikt met het dimmen van de meeste variabelen. In sommige gevallen kun je er echter niet omheen.
Een voorbeeld hiervan is bij gebruik van een functie waarbij de inputvariabelen binnen de functie al gedimd zijn als bepaalde types. Indien je binnen je sub deze variabelen niet dimt als deze types dan zal de functie ook niet werken. Kijk voor een goed voorbeeld hiervan naar de Kolomtxt functie. Hier zie je dat de output van deze functie gedeclareerd is als string en de input als integer. Indien de kolomletter in de sub niet gedefinieerd staat als string en de input variabele kolom als integer dan werkt de functie niet.
Application Methodes binnen een macro
Er zijn verschillende Application methodes die je kunt gebruiken. Deze hebben allemaal ook een verschillende functie. Er zijn er in ieder geval 2 die ik standaard toepas binnen de structuur van mijn macro. De eerste daarvan is Application.ScreenUpdating. Door deze aan het begin van het script uit te zetten zorg je ervoor dat je scherm niet ververst wordt tijdens het verwerken van de macro. Verversen van je scherm tijdens een macro heeft geen toegevoegde waarde dus hiermee kun je de performance van je script aardig mee verbeteren. Dit heeft meer impact dan het dimmen van variabelen.
De tweede methode is Application.DisplayAlerts. Deze zorgt ervoor dat je tijdens het afspelen van je script geen waarschuwingsmeldingen krijgt te zien die je door moet drukken. Tijdens een automatisch proces zijn dit soort acties ook iets wat je altijd moet zien te vermijden.
Sub VoorbeeldApplicationMethods()
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
     '------Uit te voeren code
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
Dan is er nog één methode die ook hoort bij de vaste macro onderdelen. Dat is de Application.Calculation methode. Met deze methode kun je automatische berekeningen binnen de sheet aan of uit zetten. Hierbij heb je niet de keuze True of False. Je zet de berekeningen uit met ‘Application.Calculation = xlCalculationManual‘ en je zet ze weer aan met ‘Application.Calculation = xlCalculationAutomatic‘. De reden dat ik deze niet standaard toepas aan het begin en einde van mijn script is dat er ook een situatie kan zijn dat ik een waarde ophaal via een formule uit een cel in mijn sheet. Als de berekeningen dan uit staan dan is deze waarde mogelijk niet correct. Je kunt in dit geval ervoor kiezen om de automatische berekeningen voor deze actie aan te zetten en daarna meteen weer uit. Deze setting heeft net als de screenupdating methode erg veel impact op de performance van je macro.
Option Explicit is ook één van de vaste macro onderdelen
Door bovenin je module (nog boven je eerste sub) de tekst Option Explicit te schrijven zorg je ervoor dat je code gecontroleerd wordt op het declareren van je variabelen. Dit is erg handig om twee redenen. De eerste reden is dat wanneer je variabelen declareert je code qua performance een stuk beter wordt. Visual Basic weet dan precies welk type data je variabele bevat en hoe daarmee om gegaan moet worden.
Daarnaast komt het ook erg van pas op het moment dat je een tikfout maakt. Mocht je namelijk een variabele verkeerd schrijven dan wordt de waarde niet doorgegeven en werkt je code niet zoals je verwacht. Door Option Explicit te gebruiken krijg je meteen een signaal waaruit je kunt opmaken welke variabele verkeerd geschreven is. Deze is dan namelijk nog niet gedeclareerd.
Heb je nog vragen over de vaste macro onderdelen die beschreven staan in dit artikel of gebruik je zelf nog vaste macro onderdelen die hier niet beschreven staan? Laat het weten in de reacties!
							
			
Pingback:Hoe gebruik ik een If statement in VBA? - Macro Excel Advies