8. Visual Basic for Applications

Access biedt uitgebreide mogelijkheden tot automatiseren met macro's, maar toch zijn er situaties waar macro's niet voldoen.
Dan is het zinvol iets af te weten van de objectgeoriënteerde programmeertaal VBA, Visual Basic for Applications.

Je kan trouwens in elke Office-applicatie, zoals bv. Word en Excel, VBA-modules ontwerpen om taken te automatiseren.

8.1. VBA of macro's

Wanneer gebruik je VBA in plaats van macro's?

Heb je macro's gebruikt, maar wil je liever verder werken met VBA? Converteer de macro's.

Na de conversie vind je de subroutine(s) in de VBA-Editor terug. De originele macro blijft ook bestaan.

8.2. De Visual Basic Editor

Er zijn drie courante methodes om in de VBA-editor terecht te komen:

De VBA-Editor is een apart Access-venster. Je kan terug naar de database via het eerste knopje op de VBA-werkbalk, via de Windowstaakbalk of door de VBA-Editor te sluiten.

Linksboven zie je de projectverkenner. Er zijn drie soorten modules, die je opent door erop te dubbelklikken: project

Linksonder staat normaal het eigenschappenvenster. Daar zie je de eigenschappen van het geselecteerde object en kan je ze aanpassen.

Rechts in de VBA-Editor zie je venster Programmacode, om de code te schrijven.
Bovenaan zie je twee keuzelijsten:

Bijzonder handig is het objectenoverzicht, dat je oproept met F2 of via menu Beeld.
In de eerste kolom kan je zoeken in de bestaande klassen, ernaast verschijnen de eigenschappen of methoden voor die klasse.
Druk F7 of kijk in menu Venster om terug te keren naar de programmacode.

Bovenaan in de programmacode verschijnt altijd automatisch de regel Option Compare Database.
Die laat je gewoon staan. De optie zorgt er o.a. voor dat bij het vergelijken van tekst geen onderscheid gemaakt wordt tussen hoofdletters en kleine letters.

Commentaar voeg je toe na een enkel aanhalingsteken '

Wil je een regel code op de volgende regel verder typen, dan eindig je de eerste regel met _ d.w.z. een spatie en een underscore.


8.3. Programmaverloop

Een volledige databasetoepassing ontwikkelen omvat altijd volgende stappen:

  1. Zet op papier wat je precies wenst: wat moet het programma doen?
  2. Ontwerp de database, eerst op papier (analyse), dan op computer: tabellen, velden, relaties.
  3. Ontwerp de gebruikersinterface: formulieren en rapporten.
  4. Schrijf de programmacode, zowel voor elk event als voor de verbinding van alle onderdelen.
  5. Test het hele programma zelf uit en laat anderen het uitproberen; waarschijnlijk zal je nog foutopvang moeten toevoegen!
  6. Documenteer het programma: hulp voor de gebruiker, technische info voor de programmeur.
  7. Geef het programma vrij voor gebruik en voorzie mogelijkheden voor onderhoud.

In een VBA-programma worden samenhorende instructies verzameld in subroutines of functies en die worden weer verzameld in modules.

VBA-code typ je dus in een module

Een module bevat één of meer subroutines. Een subroutine is een verzameling acties die onder één naam samengevat en na elkaar uitgevoerd worden.

Subroutines kunnen public of private zijn. Je typt dat woord voor Sub of Function in de definitie van de routine.


8.4. Debuggen in VBA

Debuggen betekent het programma controleren op (programmeer)fouten.

Het is verleidelijk om de hele code na mekaar te typen en dan alles te debuggen, maar dat lijkt meestal op het openen van de doos van Pandora: de ene fout na de andere vliegt eruit ... Beter controleer je na elke subroutine of die tenminste klopt.

Als er een fout opgetreden is, komt er een venstertje met een foutcode en knop Debug. Kies je deze optie, dan kan je in de code de cursor op een variabele zetten en je ziet de waarde ervan. Of je selecteert een object.

8.4.1. Venster Direct

Via menu Beeld (View) kan je Venster Direct (Immediate Window) oproepen. Daarin kan je de actuele waarde van een variabele opvragen: typ ? varNaam of Debug.Print varNaam gevolgd door Enter.

Je kan er ook een volledig commando in typen of plakken, gevolgd door Enter en je krijgt het resultaat van het commando te zien.

Opmerking: Debug.Print varNaam kan je ook gewoon ergens in de code zetten, dan wordt op het moment dat de uitvoering aan dat commando komt, de waarde van de variabele getoond.

8.4.2. De code stap voor stap uitvoeren

Als vele variabelen geregeld van waarde veranderen of je hebt ingewikkelde herhalingen in je code gebouwd, dan is het handig om zo'n code regel per regel af te lopen, om te zien of alle variabelen op elk moment de gewenste waarde hebben.

Om "stap voor stap" te activeren druk je F8 of kies je in menu Foutopsporing – Stap.
Dan wordt de code gemarkeerd die dadelijk uitgevoerd zal worden. Blijf F8 drukken om verder te 'stappen'.

Een andere methode is via breekpunten. Je kan zo'n breekpunt toevoegen via Foutopsporing – Breekpunt. Dan wordt de code gewoon uitgevoerd tot ze aan zo'n breekpunt komt en daar stopt de uitvoering.

Handig daarbij is om via menu Beeld – Venster Lokale Variabelen tevoorschijn te toveren: daar kan je tijdens het 'stappen' telkens de waarde van elke variabele aflezen.