6.1 Enkele eenvoudige macro's

6.1.1 Inleiding

M.b.v. macro's kunnen heel wat handelingen die u frequent moet uitvoeren, geautomatiseerd worden. Een macro wordt uitgevoerd naar aanleiding van een gebeurtenis, bijvoorbeeld het klikken op een knop door een gebruiker.

Programmeren in Ms-Access kan naast macro's ook gebeuren in Visual Basic for Applications, de programmeertaal die bij het pakket hoort. Dit komt in een volgende hoofdstuk aan bod.

In dit hoofdstuk worden de basisvaardigheden behandeld voor het maken, opslaan en gebruiken van macro's. Daarnaast vindt u een reeks van voorbeelden terug.

 

6.1.2 Een macro creëren, bewaren en uitvoeren

Om een nieuwe macro te maken en het macro-venster te openen, selecteert u in het database-venster de macro-folder en druk vervolgens Nieuw. Het macro-venster dat nu verschijnt bestaat (voorlopig) uit drie delen.

 

eerste deel: kolom Actie - hier worden de handelingen vermeld die de macro moet uitvoeren. De acties kunnen door u worden ingetikt maar ook worden geselecteerd uit een keuzelijst.

tweede deel: kolom Beschrijving - hier worden de acties van de macro omschreven. Deze kolom is niet verplicht, maar wel handig om de bedoeling van elke actie uit te leggen. Zeker in een complexe macro is het invullen van deze kolom aangewezen.

derde deel: Actie-argumenten - bij de meeste actie's horen actie-argumenten die extra informatie geven omtrent de actie.

Merk op dat bij het selecteren of invullen van zowel actie's als actie-argumenten rechts onderaan het scherm telkens een helpscherm te zien is omtrent die actie of dat actie-argument (blauwe tekst).

Hieronder volgt een alfabetisch overzicht van de meest voor de hand liggende macro-acties.
Naast elke actie vindt u nu reeds de Engelse vertaling die ook gehanteerd wordt bij het DoCmd-object. Met de methoden van het DoCmd-object kunnen namelijk Ms-Access acties worden uitgevoerd vanuit Visual Basic For Applications.
Bovendien wordt vermeld in welk gedeelte van dit hoofdstuk u een voorbeeld vindt omtrent die macro-actie. De functietoets F1 geeft natuurlijk een volledig helpscherm.

 

macro-actie

Engelse vertaling

voorbeeld

Afdrukken Print 6.1.4 voorbeeld 8
Afsluiten Quit 6.1.4 voorbeeld 7
AlleRecordsWeergeven ShowAllRecords 6.1.4 voorbeeld 6
FilterToepassen ApplyFilter 6.1.4 voorbeeld 6
FormulierOpenene OpenForm 6.1.2
Maximaliseren Maximize 6.1.2
MenuOpdrachtUitvoeren DoMenuItem 6.1.4 voorbeeld 8
Minimaliseren Minimize  
NaarBesturingselementGaan GoToControl 6.1.2
NaarRecordGaan GoToRecord 6.1.4 voorbeeld 5
Pieptoon Beep 6.1.4 voorbeeld 6
QueryOpnieuwUitvoeren Requery  
RapportOpenen OpenReport 6.1.4 voorbeeld 2
RecordZoeken FindRecord 6.2.2 voorbeeld 3
Sluiten Close 6.1.4 voorbeeld 3
WaardeInstellen SetValue 6.2.2 voorbeeld 1

 

Als eerste voorbeeld creëren we een macro die een formulier met informatie omtrent klassen opent waarbij de cursor wordt geplaatst op het besturingselement Titularis (zie tabel tblKlassen). Wijzigingen aan de velden Klascode, Onderwijsvorm en Klas_omschrijving zijn namelijk weinig waarschijnlijk. Indien dit nog niet het geval is, dient u zeker vooraf een gepast formulier te maken (frmKlassen) op basis van de tabel Klassen.

Wat moet m.a.w. de macro mcrKlassen doen?

1 Het formulier frmKlassen moet worden geopend
Hiertoe selecteren we de actie FormulierOpenen (zie keuzelijst) en vullen het actie-argument Formuliernaam op gepaste wijze in. Kies ook hier uit de aangeboden keuzelijst!

2 de cursor moet worden geplaatst op het veldje Titularis
Hiertoe selecteren we de actie NaarBesturingselementGaan (zie keuzelijst) en vullen het actie-argument Besturingselementnaam op gepaste wijze in.

3 het geopende formulier moet in z'n grootste formaat te zien zijn.
Hiertoe selecteren we de actie Maximaliseren (zie keuzelijst). Let wel, deze actie heeft GEEN actie-argumenten.

De kolom Beschrijving kan hier per actie de nodige uitleg verschaffen. Om uitleg te geven over de totale macro kan bijvoorbeeld voor de eerste actie een nieuwe lege rij worden ingevoegd (zie werkbalk). Op deze eerste rij kan nu opnieuw de kolom Beschrijvng worden ingevuld. Hieronder vindt u het eindresultaat.

 

 

We bewaren onze macro via Bestand - Opslaan als... Als naam kiezen we hier voor mcrKlassen.

Het uitvoeren van een macro kan zowel in het macro-venster als in het database-venster. In dit database-venster merkt u de de macro mcrKlassen werd toegevoegd in de lijst. Dubbelklikken of selecteren gevolgd door Start zal de macro voor u uitvoeren. Testen maar...

 

6.1.3 De werkbalk macro

 

6.1.4 Een macro starten vanuit een formulier

Hiervoor werd vermeld dat een macro kan worden gestart vanuit zowel het macro-venster als vanuit het database-venster.  Meestal echter zal een macro worden gestart vanuit een formulier dat dan dienst doet als interface tussen de gebruiker en de macro. Zo zullen we er bijvoorbeeld vaak moeten voor zorgen dat bij het klikken op een opdrachtknop een bepaalde actie of reeks van acties (m.a.w. een macro) moeten worden uitgevoerd. Onderstaande voorbeelden zullen dit verduidelijken.

Een eenvoudig menusysteem moet ons de kans bieden om informatie over boeken te raadplegen (en eventueel aan te vullen en/of te wijzigen) op het scherm alsook een boekenlijst af te drukken. We moeten het menu op een eenvoudige manier kunnen verlaten.

Om het voorbeeld hierna goed te kunnen volgen maakt u best op voorhand volgende objecten aan:

- een formulier frmMenu_boeken dat eruit ziet als volgt:

 

Merk op: zorg voor een correcte naamgeving wat betreft de opdrachtknoppen (bijvoorbeeld: cmdBoekeninfo, cmdBoekenlijst, cmdEinde)

- een formulier frmBoeken dat alle velden uit de tabel tblBoeken laat zien

- een rapport rptBoekenlijst dat een overzicht biedt van de velden volgnummer t.e.m. eenheidsprijs van alle boeken (geen groepering vereist, wel een sortering per vakcode)

 

 

voorbeeld 1: uitwerken van opdrachtknop cmdBoekeninfo

Vanuit het ontwerp van het menuformulier frmMenu_boeken kan via rechts klikken op de opdrachtknop cmdBoekeninfo gekozen worden voor Gebeurtenis opbouwen... Hier vindt u o.a. de mogelijkheid om macro op te bouwen (Opbouwfunctie voor macro's). In het macro-venster dat vervolgens verschijnt kunnen nu de gepaste actie('s), actie-argument(en) en/of beschrijving worden ingetikt. Als naam voor de macro kiezen we hier voor mcrBoekeninfo.

Actie

 

FormulierOpenen  
   

Actie-argument

 
Formuliernaam frmBoeken

Bekijk de eigenschappen (i.h.b. de gebeurteniseigenschappen) van de knop cmdBoekeninfo. Bij de gebeurtenis Bij klikken vindt u inderdaad de macronaam mcrBoekeninfo terug. Dit is dus bovendien een tweede manier om een macro te maken, nl. via de (gebeurtenis)eigenschappen van de knop in kwestie.

 

voorbeeld 2: uitwerken van opdrachtknop cmdBoekenlijst

Vanuit het ontwerp van het menuformulier frmMenu_boeken kan via rechts klikken op de opdrachtknop cmdBoekenlijst gekozen worden voor Gebeurtenis opbouwen... Hier vindt u o.a. de mogelijkheid om macro op te bouwen (Opbouwfunctie voor macro's). In het macro-venster dat vervolgens verschijnt kunnen nu de gepaste actie('s), actie-argument(en) en/of beschrijving worden ingetikt. Als naam voor de macro kiezen we hier voor mcrBoekenlijst.

Actie

 
RapportOpenen  
   

Actie-argument

 
Rapportnaam rptBoekenlijst
Weergave Afdrukvoorbeeld

Controleer of de macro vermeld staat bij de gebeurteniseigenschap Bij klikken van de knop cmdBoekenlijst.

 

voorbeeld 3: uitwerken van opdrachtknop cmdEinde

Vanuit het ontwerp van het menuformulier frmMenu_boeken kan via rechts klikken op de opdrachtknop cmdEinde gekozen worden voor Gebeurtenis opbouwen... Hier vindt u o.a. de mogelijkheid om macro op te bouwen (Opbouwfunctie voor macro's). In het macro-venster dat vervolgens verschijnt kunnen nu de gepaste actie('s), actie-argument(en) en/of beschrijving worden ingetikt. Als naam voor de macro kiezen we hier voor mcrEinde.

Actie

 
Sluiten  

 Merk op dat de actie Sluiten GEEN actie-argumenten bevat.

Controleer of de macro vermeld staat bij de gebeurteniseigenschap Bij klikken van de knop cmdEinde.

voorbeeld 4: automatisch laten verschijnen van het boekenmenu

Willen we bij het openen van de database BOEKEN.MDB automatisch het boekenmenu (frmMenu_boeken) zien verschijnen dan creëren we daartoe een macro met als naam autoexec (denk aan de file autoexec.bat !!). Indien Ms-Access namelijk bij het openen van een database een macro ontdekt met die specifieke naam wordt deze macro eerst uitgevoerd.

Wil je bij het openen van een database de werking van de eventueel aanwezige macro autoexec uitschakelen, dan houdt je de Shift-toets ingedrukt bij het openen.

 

Actie

 

FormulierOpenen  
   

Actie-argument

 
Formuliernaam frmMenu_boeken

 

 

Voor de volgende voorbeelden stappen we over naar het formulier frmBoeken. We voegen een viertal knoppen toe (in formulierkop en detailsectie) zoals hieronder aangegeven.

 

voorbeeld 5: uitwerking van de knop cmdBoeken_toevoegen in het formulier frmBoeken

Om vanuit het formulier frmBoeken snel een nieuw record toe te voegen EN de cursor reeds op het besturingselement Vakcode te plaatsen (type veld Boekcode = auto-nummering) bieden de actie's NaarRecordGaan en NaarBesturingsElementGaan een oplossing. Creëer de macro mcrBoeken_toevoegen. 

Actie

 
NaarRecordGaan  
   

Actie-argument

 
Record Nieuw
   

 

Actie

 
NaarBesturingsElementGaan  
   

Actie-argument

 
Naambesturingselement Vakcode
 

 

voorbeeld 6: uitwerken van de knop cmdBoeken_vakcode in het formulier frmBoeken

De knop cmdBoeken_vakcode moet ons de kans bieden om enkel die boeken van een door de gebruiker opgegeven vakcode te tonen op het scherm. Alle boeken moeten dus als het ware "gefilterd" worden zodat enkel de gewenste boeken overblijven. De actie die we hier leren kennen is m.a.w. FilterToepassen. De actie-argumenten bieden de kans om de aard van de filter op te stellen. Dit kan aan de hand van een query of via aan WHERE-voorwaarde. In onderstaand voorbeeld werd gekozen voor de laatste mogelijkheid. De WHERE-voorwaarde ziet er dan als volgt uit:

[tblBoeken]![Vakcode] = [geef vakcode : ]

Links van het gelijkheidsteken staat de veldnaam Vakcode (uit de tabel tblBoeken) vermeld. Rechts van het gelijkheidsteken staat de vraag die bij het uitvoren van de macro aan de gebruiker zal worden gesteld.

Creëer de macro mcrBoeken_vakcode.

Actie

 
FilterToepassen  
   

Actie-argument

 
WHERE-voorwaarde [tblBoeken]![Vakcode] = [geef vakcode : ]

Om bij actie-argumenten te verwijzen naar objecten van de database, kan hiervoor worden gebruik gemaakt van de opbouwfunctie voor expressies. Klik hiervoor op de knop Opbouwen, rechts van de WHERE-voorwaarde. Via selecteren van de juiste objecten en plakken kan de vergelijking worden opgebouwd.

 

Eventueel kan de macro-actie Pieptoon de aandacht van de gebruiker vestigen op het feit dat hij nu effectief een gegeven (vakcode) moet intikken!

Actie

 
FilterToepassen  
Pieptoon

oorbeeld 7: uitwerken van de knop cmdAlle_boeken in het formulier frmBoeken

Na een selectie zoals gemaakt in voorbeeld 6 is het terug opvragen van alle boeken zeker aangewezen. Dit kan bijvoorbeeld met een passende knop cmdAlle_boeken waaraan een macro mcrAlle_boeken wordt gekoppeld. De actie die hier kan worden gebruikt is AlleRecordsWeergeven.

 

Voorbeeld 8: uitwerken van de knop cmdAfdrukken_boekinfo in het formulier frmBoeken

Via de knop cmdAfdrukken_boekinfo moet het mogelijk zijn het huidig actief record af te drukken. Zonder het gebruik van macro's selecteren we daarvoor eerst het actief record en drukken we daarna deze selectie af.
Het selecteren van het actief record kan via het menu Bewerken en de opdracht Record selecteren. De keuze van een dergelijke menu-opdracht kan worden geautomatiseerd via de macro-actie MenuopdrachtUitvoeren. Via de argumenten kan de gebruiker de menunaam (in ons geval Bewerken) en de menu-opdracht (in ons geval Record selecteren) aanduiden.
Het afdrukken van dit geselecteerd record wordt uitgevoerd via de macro-actie Afdrukken. Let op het actie-argument afdrukbereik ( ! selectie ).

Creëer de macro mcrBoeken_afdruk

Actie

 
MenuopdrachtUitvoeren  
   

Actie-argument

 
menubalk
menunaam
opdracht
Formulier
Bewerken
Record selecteren

 

Actie

 
Afdrukken  
   

Actie-argument

 
Afdrukbereik selectie

 

 

BEDENKING BIJ VOORBEELDEN 5, 6, 7 en 8:

Activeer het macro-tabblad in het databasevenster. Je vindt daar o.a. de macro's mcrBoeken_toevoegen (voorbeeld 5), mcrBoeken_vakcode (voorbeeld 6), mcrAlle_boeken (voorbeeld 7) en mcrBoeken_Afdruk (voorbeeld 8). Indien we nog meer knoppen toevoegen aan dit formulier frmBoeken en daar opnieuw macro's aan koppelen zal dit vlug leiden tot een onoverzichtelijk geheel. Welke macro heeft dan te maken met welk formulier?

Een oplossing wordt geboden door het gebruik van macrogroepen. Hiermee worden alle macro's die betrekking hebben op één formulier in één macrogroep gebundeld. We voeren die even uit voor het formulier frmBoeken.
We creëren een nieuwe macro(groep) via de knop Nieuw. Op de macrowerkbalk bevindt zich een knop Macronamen. Bij klikken verschijnt een extra kolom in het macrovenster. Hieronder ziet u hoe de vier macro's nu in één macrogroep worden ingetikt (gebruik eventueel knippen en plakken vanuit de oorspronkelijke macro's). De blanco lijnen tussen de divers macro's werden enkel toegevoegd voor de leesbaarheid. Deze macro(groep) wordt bijvoorbeeld bewaard als mcrBoeken (macrogroep gekoppeld aan frmBoeken).

Hoe worden de macro's uit de macrogroep mcrBoeken nu gekoppeld aan de knoppen cmdBoeken_toevoegen, cmdBoeken_vakcode en cmdAlle_boeken?

Bekijk hiervoor de gebeurteniseigenschappen van de knop cmdBoeken_toevoegen. Opnieuw vindt u hier de eigenschap Bij klikken terug. Vermeld hier nu de gepaste macro, nl. mcrBoeken.Toevoegen.
Voor de knop cmdBoeken_vakcode wordt dit mcrBoeken.Vakcode,
voor de knop cmdAlle_boeken is dit mcrBoeken.alle en
voor de knop cmdAfdrukken _boekinfo is dit mcrBoeken.Afdrukken_boekinfo.

 

6.1.5 Oefeningen

vraag 1: Kan de macro mcrEinde ook nog in andere formulieren worden gebruikt om het formulier te sluiten of is het strict verbonden aan het menuformulier frmMenu_boeken dat in 6.1.4 werd gecreëerd?

vraag 2: Waarom kiest men in testfase beter eerst voor een Weergave Afdrukvoorbeeld (zie afdrukken van de boekenlijst) i.p.v. een Weergave Afdrukken?

vraag 3: Welke actie's realiseren het volgende? Bekijk ook telkens de (eventuele) actie-argumenten.

- een pieptoon genereren (bijvoorbeeld bij het openen van een formulier)
- in een tabel een bepaalde klant proberen terugvinden
- u verplaatsen naar het laatste record in een tabel
- Ms-Access afsluiten
- Een actief venster vergroten

vraag 4: Voeg aan het formulier frmBoeken een knop cmdBoeken_uitgeverij toe die de kans moet bieden om enkel die boeken te laten zien op het scherm van een door de gebruiker op te geven uitgeverij. Pas de reeds bestaande macrogroep mcrBoeken aan.
Moet hier opnieuw een knop worden voorzien om alle boeken te tonen op het scherm?

vraag 5: Voeg aan het formulier frmBoeken nieuwe (grote) navigatieknoppen toe om naar een volgend of vorig record te gaan. Doe hetzelfde om naar het eerste en laatste record te gaan.

antwoorden