6.2.1 Inleiding
Een macro bestaat uit een verzameling van acties. Soms moeten één of meerdere acties slechts worden uitgevoerd indien aan een zekere voorwaarde wordt voldaan. Die voorwaarde kan ook opgenomen worden in het macro-venster via een speciaal daarvoor voorziene kolom. Op de macro-werkbalk bevindt zich een voorwaardenknop.

6.2.2 Voorbeelden
voorbeeld 1
Op het formulier frmBoeken willen we duidelijk zien welke boeken niet in voorraad zijn. We willen daartoe bijvoorbeeld de tekst Aantal_in_voorraad (is het besturingselement lblAantal_in_voorraad) een rode kleur geven indien die voorraad gelijk is aan nul. Elk label kent de eigenschap Voorgrondkleur. Dit is de eigenschap die we hier moeten manipuleren (als rood instellen (255) voor een nulvoorraad, opnieuw als zwart instellen (0) indien er nog boeken in voorraad zijn).
De macro werd toegevoegd aan de macrogroep mcrBoeken. De volledige naam is dan mcrBoeken.Aantal_in_voorraad. Indien het besturingselement Aantal_in_voorraad gelijk is aan nul dan dient de Voorgrondeigenschap van het label lblAantal_in_voorraad gelijk gesteld te worden aan 255 (voor een rode kleur). Dit kan via de actie WaardeInstellen met als actie-argumenten Item (wat moet een waarde krijgen) en Expressie (welke waarde moet dan dan wel zijn).
| Item | [frmBoeken]![lblAantal_in_voorrad]![Voorgrondkleur] |
| Expressie | 255 |
In de eenvoudige voorbeelden uit 6.1 werd de macro steeds gekoppeld aan de gebeurtenis Bij
klikken van een opdrachtknop. Hier gaat het echter niet zozeer over een opdrachtknop
maar wel over het veld Aantal_in_voorraad. De macro moet nl.worden uitgevoerd telkens een
nieuwe Aantal_in_voorraad verschijnt op het scherm, maw telkens een nieuw record
verschijnt. In dit geval moet Access nl. controleren op de voorraad verschillend is van
nul (zwart kleuren) ofwel gelijk is aan nul (rode kleur).
We hebben nu te maken met een gegevensgebeurtenis.
Gegevensgebeurtenissen vinden plaats als gegevens zijn ingevoerd, verwijderd of
gewijzigd in een formulier of besturingselement, of als de focus van de ene record naar de
andere wordt verplaatst.
In het bijzonder betreft het hier de gebeurtenis Bij aanwijzen die optreedt als
de focus naar een record gaat waardoor die record de huidige record wordt (zie ook Help
voor uitgebreide omschrijvingen en opsommingen van soorten gebeurtenissen). Deze
gebeurtenis vindt plaats als een formulier voor het eerst wordt geopend, en telkens
wanneer de focus wordt verplaatst van een record naar een volgende.
voorbeeld 2
Bij het invullen van diverse velden zoals Minimum_voorraad
is het invullen (per vergissing) van een negatieve waarde natuurlijk niet toegestaan (zie
ook opmerking hieronder). Voor er naar een nieuw record wordt gegaan wordt de
waarde van dit veld dan natuurlijk ook best getest. Werd toch een verkeerde (negatieve)
waarde ingevuld, kan de gebruiker op zijn fout worden gewezen via een gepaste melding.
Deze melding kan worden gegenereed via de actie Berichtenvenster. Zie de
Help (via functietoets F1) voor uitleg omtrent de argumenten. Deze gebeurtenis moet
worden geannuleerd en de gebruiker moet de kans krijgen zijn fout te herstellen. De focus
wordt dus terug aan het besturingselement Minimum_voorraad gegeven.
Dat de acties Berichtvenster, GebeurtenisAnnuleren en NaarBesturingselementGaan
allemaal enkel worden uitgevoerd bij een negatieve minimum_voorraad wordt
duidelijk gemaakt via het ... - teken dat nl. de voorwaarde erboven op die lijnen
herhaalt.
Deze macro moet worden uitgevoerd (maw test op eventuele negatieve minimum_voorraad) indien u naar een nieuw record wenst te gaan op het record wenst op te slaan. De gebeurteniseigenschap die we hier dan ook gebruiken is Voor bijwerken. Als u nieuwe of gewijzigde gegevens invoert in een besturingselement op een formulier en vervolgens naar een andere record gaat vindt de gebeurtenis Voor bijwerken plaats.

opmerking:
Het feit dat hier op formulierniveau de inhoud van minimumvoorraad werd getest op een eventuele negatieve inhoud wordt het liefst vermeden door dit reeds op tabelniveau (zie validatieregel bij de veldeigenschappen) op te vangen. Op die manier geldt de (evidente) controle in elk object (bijvoorbeeld een formulier) dat gebruik maakt van de tabel tblBoeken.
Hier kon trouwens ook de eigenschap validatieregel van het besturingselement minimumvoorraad van het formulier zelf gebruikt worden.
voorbeeld 3
Hernemen we terug de macro mcrBoeken.Vakcode (zie voorbeeld 6 uit 6.1.4) waarbij alle boeken worden gezocht ("gefilterd") van een door de gebruiker op te geven vak (via de vakcode). Wordt de vakcode niet gevonden (bijvoorbeeld door een tikfout) dan verschijnt een "blanco" record. Een passende foutmelding met activeren van eerste record van tblBoeken is wellicht een meer gebruiksvriendelijke oplossing.
Het testen of na de actie FilterToepassen inderdaad geen resultaat werd geboekt maar daarentegen een "blanco" record wordt getoond is opnieuw mogelijk via een gepaste voorwaarde mbv de IsNull()functie. We passen de macro mcrBoeken.Vakcode dan ook aan zoals hieronder aangegeven. Zie Help voor meer uitleg over de IsNull() functie.

opmerking:
Indien de door de gebruiker opgegeven vakcode niet werd gevonden wordt in
hierbovenstaande macro opnieuw de eerste record geactiveerd. De gebruiker wenst echter
misschien opnieuw de record te zien die aanvankelijk (voor zoekopdracht begon) op het
scherm stond.
Dit kunnen we nu oplossen door het volgnummer te onthouden VOOR we aan de zoekopdracht
beginnen. Daartoe creëren we een tekstvak txtvolgnummer (bijvoorbeeld in koptekst van
formulier) waarin we het volgnummer van de actieve record onthouden bij het starten van
het zoekproces en gebruiken daarvoor de macro-actie WaardeInstellen.
Wordt de ingetikte vakcode niet gevonden, dient nu opnieuw (na foutmelding) de record,
waarvan we het volgnummer hebben onthouden, te worden gezocht. De macro-actie RecordZoeken
kan ons hierbij helpen. Vooraf positioneren we ons in het gepaste besturingselement (nl.
volgnummer) met de macro-actie NaarBesturingselementGaan. We zoeken daarna naar
=[txtvolgnummer]. Let op: vergeet het gelijkheidsteken niet.

6.2.3 Oefeningen
vraag 1: in elke klas met meer dan 15 leerlingen is een hulpklassenleraar voorzien. Zorg ervoor dat indien je de klassen bekijkt in het formulier frmKlassen dit duidelijk per klas wordt weergegeven (of er al dan niet een hulpklassenleraar is).