10 Macro’s
10.1 Over macro’s maken
Macro’s kunnen handelingen automatiseren die veel voorkomen of vrij complex zijn. Een macro is een klein programmaatje dat bepaalde acties kan uitvoeren. Zo kun je een macro de opdracht geven om een formulier te openen of om een record op te zoeken. De uitvoering van een macro wordt vaak aan een besturingselement zoals een opdrachtknop toegekend. Bij het klikken op de knop worden dan de opdrachten die in de macro zitten uitgevoerd. Zo kun je extra functies aan formulieren en rapporten toekennen. Een macro wordt als een object in de database zelf opgeslagen.
In feite bestaat een macro in Access uit een lijst van achter elkaar uit te voeren acties. Voor de meeste acties zijn een of meer argumenten nodig. Voor het maken van macro’s heb je geen programmeerkennis nodig.
Een aandachtspunt bij macro’s is het aspect van veiligheid. Access verdeelt de mogelijke macro acties in twee soorten:
- onschadelijke acties, ongeacht hoe ze worden gebruikt
- gevaarlijke acties
Zelfs een actie als Afdrukken wordt als gevaarlijk beschouwd, omdat je ook ongewenste opdrachten naar de printer kunt sturen.
Bij het toevoegen van acties in het macrovenster toont Access standaard alleen de acties die volkomen veilig zijn. Om een volledige lijst met acties te krijgen, inclusief de gevaarlijke acties, moet je een instelling wijzigen. Kies dan in het macro venster tab Design > Alle acties weergeven (groep Weergeven/verbergen).
10.2 Klant zoeken op code
Er moet een formulier gemaakt worden met daarop de gegevens van een klant. Om het de gebruiker wat gemakkelijker te maken om een bepaalde klant waarvan je de klantcode kent, op te zoeken, moet er een keuzelijst op het formulier gemaakt worden waarop je de klantcode kunt invoeren waarna de gegevens van de bijbehorende klant in het formulier worden getoond.
ANALYSE
De basis van het formulier kan via een standaarsformulier gemaakt worden. De keuzelijst is het besturingselementKeuzelijst met invoervak. Verder dient er een macro gemaakt te worden die twee taken uitvoert. Allereerst naar de keuzelijst gaan en daarna het record opzoeken dat hoort bij de ingevoerde klantcode.
Taak 10.1 Bestand: snoep365.accdb
Open de database.
Selecteer de tabel Klanten. Deze hoeft niet geopend te worden.
Klik tab Maken > Formulier (groep Formulieren). Het formulier wordt aangemaakt en geopend in de Indelingsweergave.
Sla het formulier op onder de naam Zoek klant op code. Het gemakkelijkste gaat dit via de knop Opslaan in de werkbalk Snelle toegang.
Schakel over naar de Ontwerpweergave.
Selecteer Ontwerp > Keuzelijst met invoervak (groep Besturingselementen) en teken daarna rechts in het deel van de formulierkoptekst een rechthoekig kader voor de keuzelijst.
Na het tekenen van het kader wordt automatisch de Wizard keuzelijst met invoervak opgestart.
Beantwoord de achtereenvolgende vragen van de Wizard als volgt:
- De waarden voor de keuzelijst met invoervak moeten worden opgezocht in een tabel of query.
- Tabel: Klanten levert de waarden voor de keuzelijst met invoervak.
- Alleen het veld Klantcode moet worden toegevoegd aan de keuzelijst met invoervak.
- Records oplopend sorteren op klantcode.
- De voorgestelde breedte van de kolom in de keuzelijst accepteren.
- De waarde bewaren voor later gebruik.
- Tekst voor het label bij de keuzelijst: Zoeken op klantcode:
Na het Voltooien van de Wizard ben je weer terug in de Ontwerpweergave.
Wanneer het label en de keuzelijst gedeeltelijk over elkaar heen liggen moet je een van beide of beide wat verplaatsen. Dit doe je door het vierkantje in de linkerbovenhoek van het object met een ingedrukte linkermuisknop te verslepen.
Sluit het formulier Zoek klant op code en bewaar de wijzigingen.
Kies tab Maken > Macro (groep Macro’s en code).
Klik op de keuzepijl in het vak Nieuwe actie toevoegen en selecteer uit de lijst de actie NaarBesturingselementGaan.
Typ
Klantcode
in het vak Besturingselementnaam.
Klik op de keuzepijl in het vak Nieuwe actie toevoegen en selecteer actie RecordZoeken.
Typ de waarde
=[zoekcode]
in het vak Zoeken naar. De andere argumenten zijn al automatisch door Access van een standaardwaarde voorzien en kunnen blijven staan.
Sluit het macrovenster en bewaar de macro onder de naam Klant zoeken op klantcode.
Open formulier Zoek klant op code in de Ontwerpweergave.
Selecteer de Keuzelijst met invoervak en wijzig in Eigenschappenvenster (tab Overige) de naam van het besturingselement in
zoekcode
.
- Met nog steeds de keuzelijst geselecteerd klik in Eigenschappenvenster (tab Gebeurtenis) in het vak Na bijwerken en selecteer via de keuzepijl de macro Klant zoeken op klantcode.
Sluit het formulier en bewaar de wijzigingen.
Open formulier Zoek klant op code en test of de keuzelijst goed werkt.
10.3 Klant zoeken op naam
Om deze taak uit te kunnen voeren is het noodzakelijk dat je eerst Taak 10.1 hebt uitgevoerd. Hierin heb je het formulier Zoek klant op code gemaakt dat in deze taak gebruikt wordt.
Er moet een formulier gemaakt worden met daarop de gegevens van een klant en met twee keuzelijsten. Via de eerste keuzelijst moet een klant op basis van de klantcode gezocht worden en via de tweede lijst via de naam. Bij dit laatste moet in de gesorteerde lijst eerst de achternaam getoond worden, met daarachter de voornaam. Na het maken van een keuze via een van beide lijsten moet de gegevens van de klant in het formulier getoond worden.
ANALYSE
Als basis van het nieuwe formulier kan het eerder gemaakte formulier Zoek klant op code genomen worden. In Access kun je een kopie van een formulier maken en dat onder een andere naam opslaan. Hierop moet dan de tweede keuzelijst gemaakt worden. Verder dient er een macro gemaakt te worden die de taken uitvoert. Allereerst naar de keuzelijst gaan en daarna het bijbehorende record opzoeken.
Taak 10.2 Bestand: snoep365.accdb
Open de database.
Geef een rechter muisklik op het formulier Zoek klant op code en kies dan uit het snelmenu voor Kopiëren. Geef dan een nieuwe rechter muisklik en kies dan uit snelmenu voor Plakken.
Noem het nieuwe formulier Zoek klant op naam en open het formulier in de Ontwerpweergave.
Maak het gedeelte voor de formulierkoptekst wat groter. Positioneer de muis boven de bovenrand van Details totdat deze wijzigt zoals in Figuur 10.8 is weergegeven. Druk dan de linker muisknop in en sleep de rand wat naar beneden zodat er voldoende ruimte is voor de tweede keuzelijst.
Maak een tweede Keuzelijst met invoervak onder de eerste keuzelijst.
Beantwoord de vragen van de Wizard achtereenvolgens als volgt:
- De waarden voor de keuzelijst met invoervak moeten worden opgezocht in een tabel of query.
- Tabel: Klanten levert de waarden voor de keuzelijst met invoervak.
- Voeg aan de keuzelijst met invoervak achtereenvolgens de volgende velden toe: Achternaam, Voornaam, Klantcode.
- Records oplopend sorteren eerst op achternaam en dan op voornaam.
- De voorgestelde breedte van de kolom in de keuzelijst accepteren en aanvinken dat de sleutelkolom (dat is de Klantcode) verborgen moet worden.
- De waarde bewaren voor later gebruik.
- Tekst voor het label bij de keuzelijst:
Zoeken op klantnaam:
Na het Voltooien van de Wizard ben je weer teug in de Ontwerpweergave.
Zorg ervoor dat labels en keuzelijsten netjes onder elkaar zijn uitgelijnd.
- Selecteer de tweede Keuzelijst met invoervak en wijzig in Eigenschappenvenster (tab Overige) de naam van het besturingselement in zoeknaam. Klik op de keuzepijl in het vak Na bijwerken en typ Klant zoeken op naam.
Deze macro bestaat nog niet en wordt in de volgende stap gemaakt.
Sluit het formulier en bewaar de wijzigingen.
Kies tab Maken > Macro (groep Macro’s en code).
Klik op de keuzepijl in het vak Nieuwe actie toevoegen en selecteer uit de lijst de actie NaarBesturingselementGaan en voer als Argument in Klantcode.
Typ Klantcode in het vak Besturingselementnaam.
Klik op de keuzepijl in het vak Nieuwe actie toevoegen en selecteer actie RecordZoeken.
Typ de waarde
=[zoeknaam]
in het vak Zoeken naar. De andere argumenten zijn al automatisch door Access van een standaardwaarde voorzien en kunnen blijven staan.
Om er voor te zorgen dat de waarde van de eerste keuzelijst mee verandert bij het kiezen van een naam, moet hiervoor nog een actie ingesteld worden. De waarde voor zoekcode moet gelijk worden aan de klantcode van het gevonden record.
- Voeg een actie toe met de naam WaardeInstellen. Deze actie beschouwt Access als een gevaarlijke actie welke standaard niet getoond wordt. Deze moet eerst in de lijst zichtbaar gemaakt worden door de instelling Alle acties weergeven (groep Weergeven/verbergen). Deze Actie heeft twee parameters, Item en Expressie, welke de volgende waarden dienen te krijgen.
- Item:
[Formulieren]![Zoek klant op naam]![zoekcode]
- Expressie:
[Formulieren]![Zoek klant op naam]![Klantcode]
Sluit het macrovenster en bewaar de macro onder de naam Klant zoeken op naam.
Open formulier Zoek klant op naam en test de werking van beide keuzelijsten.
Wanneer de eerste keuzelijst gebruikt wordt, verschijnt niet de bijbehorende naam in de tweede keuzelijst. Om dit voor elkaar te krijgen moet aan de bijbehorende macro ook een actie WaardeInstellen worden toegevoegd. Maar dat heeft consequenties voor de werking van de keuzelijst op formulier Zoek klant op code.
10.4 Keuzelijst dooscode
Deze taak is een variant op de taak waarbij de klant op basis van de klantcode gezocht wordt. Er moet nu een formulier gemaakt worden met daarop de gegevens van een doos en op dat formulier een keuzelijst om de dooscode te zoeken.
ANALYSE
De basis van het formulier kan via een standaardformulier gemaakt worden. De keuzelijst is het besturingselement Keuzelijst met invoervak. Je moet een macro maken die twee taken uitvoert. Allereerst naar de keuzelijst gaan en de dooscode ophalen. Daarna het bijbehorende record opzoeken.
Taak 10.3 Bestand: snoep365.accdb
Maak een nieuw formulier met keuzelijst en noem deze Zoek doos op code.
Maak de macro en noem deze Zoek doos op code
Open formulier Zoek doos op code en test of de keuzelijst goed werkt.