7. Macro's

Een macro is een lijst met één of meer acties die samenwerken om een bepaalde taak uit te voeren als reactie op een gebeurtenis.
In Access 2016 bestaan twee soorten macro's:

Verder heb je dan nog macro's die zichtbaar zijn als een onafhankelijk object in het navigatiedeelvenster en macro's die rechtstreeks gekoppeld worden aan een formulier- of rapportgebeurtenis.

7.1. Een macro samenstellen

Je gebruikt een macro om een reeks acties onder één naam samen te vatten en automatisch na elkaar te laten uitvoeren.

  1. Activeer lint Maken en klik in de laatste sectie op Macro.
  2. In het macrovenster zie je enkel een keuzelijst met 'veilige' acties. Klik op de laatste knop op lint Hulpmiddelen voor macro's – Ontwerp om uit alle mogelijke acties te kiezen.
  3. Kies de actie in de keuzelijst of dubbelklik op een actie, rechts op het scherm in de actiecatalogus.
  4. Indien van toepassing, vul de argumenten in. Meestal is er minstens eentje verplicht en zijn de andere argumenten optioneel.
    • Soms kan je een optie kiezen uit een lijst, anders typ je de eerste letter in van het argument en je krijgt een lijst met mogelijkheden.
  5. Voeg eventueel nog nieuwe acties met hun argumenten toe; ze zullen automatisch na elkaar uitgevoerd worden.
  6. Macro klaar? Klik op Opslaan in werkbalkje Snelle Toegang – of sluit het macrovenster – en geef de macro een duidelijke naam.

Om achteraf de macro aan te passen, mag je er NIET op dubbelklikken; dan wordt de actiereeks uitgevoerd. Rechtsklik erop in het navigatiedeelvenster en kies Ontwerpweergave.

Wil je een macro die uitgevoerd wordt bij het openen van de database? Geef de macro de naam AutoExec

7.1.1. De 'veilige' acties

Standaard zie je enkel de veilige acties, d.w.z. Alle Acties Weergeven is niet geactiveerd.
Is de optie Actiecatalogus geactiveerd, dan krijg je rechts op het scherm een overzicht van de acties per groep.
Je vindt alle acties ook terug in de keuzelijst macro-keuzelijst

In de catalogus zie je bovenaan de acties die het programmaverloop beïnvloeden:

  • Als: om een voorwaarde toe te voegen: typ een expressie bij Als en klik achteraan op Dan om de actie toe te voegen.
  • Groep: macro's die een vergelijkbare functie hebben of vaak in een bepaalde combinatie uitgevoerd worden, kan je verzamelen in een groep.
    • De macro's in de groep kunnen onafhankelijk van elkaar worden geactiveerd met actie MacroStarten. Werkwijze:
      • Dubbelklik in de actiecatalogus op Groep en geef de groep een duidelijke naam.
      • Gebruik actie MacroStarten om macro's aan de groep toe te voegen. Je kan ook 'losse' acties toevoegen.
      • Sluit het macrovenster om de groep op te slaan.
  • Opmerking: om commentaar aan de macro toe te voegen (wordt niet uitgevoerd)
  • Submacro: verzameling acties met eigen macronaam, die enkel aangeroepen kan worden door MacroStarten.

Vervolgens worden de acties op databaseobjecten besproken:

  • Afdrukvoorbeeld: toon een afdrukvoorbeeld van het geopende rapport
  • EigenschapInstellen: stel een eigenschap in voor een besturingselement op een formulier
    • Argumenten:
      • Besturingselementnaam: naam van het besturingselement waarvoor je een eigenschap wil instellen
      • Eigenschap: de eigenshcap die je wil instellen
      • Waarde: de waarde voor de in te stellen eigenschap
  • FormulierOpenen: open een bestaand formulier
    • Argumenten:
      • Formuliernaam: naam van het te openen formulier
      • Beeld: standaard modus Formulier, maar ook Ontwerp, Afdrukvoorbeeld of Gegevensblad zijn mogelijk
      • Filternaam: eventueel toe te passen filter of query
      • Where: voorwaarde om het aantal records te beperken, bv: [Klant].[Klantsoort]="particulier"
      • Gegevensmodus: de gebruiker mag gegevens toevoegen, bewerken of ze alleen lezen
      • Venstermodus: standaard, verborgen, geminimaliseerd of als dialoogvenster
  • NaarBesturingselementGaan (GoToControl): verplaats de focus naar het opgegeven besturingselement
  • NaarPaginaGaan (GoToPage): verplaats de focus naar het eerste besturingselement op de opgegeven pagina van het actieve formulier
  • NaarRecordGaan (GoToRecord): ga naar het opgegeven record
    • Argumenten:
      • Objecttype: tabel, query of formulier
      • Objectnaam: naam van de tabel, query of formulier
      • Records: ga naar het eerste, vorige, volgende, laatste of een nieuw record
      • Offset: voor Records: Ga, Vorige of Volgende kan je hier het aantal opgeven.
  • ObjectPrinten: druk het actieve object (meestal rapport) af
  • ObjectSelecteren: selecteer het opgegeven object
    • Argumenten:
      • Objecttype: tabel, query, formulier, rapport, ...
      • Objectnaam: naam van de gekozen soort object
      • In Databasevenster: standaard (Nee) is het object geopend, kies Ja om een gesloten object te selecteren in het navigatiedeelvenster.
  • RapportOpenen: open het opgegeven rapport
    • Argumenten:
      • Rapportnaam: naam van het te openen rapport
      • Beeld: afdrukvoorbeeld, ontwerpweergave of dadelijk afdrukken
      • Filternaam: naam van de query die als filter moet dienen
      • Where-Voorwaarde: hier kan je een SQL-voorwaarde intypen
      • Venstermodus: standaard, verborgen, geminimaliseerd of als dialoogvenster
  • SchermBijwerken: vernieuw het actieve venster
  • TabelOpenen: open de opgegeven tabel
    • Argumenten:
      • Tabelnaam: naam van de te openen tabel
      • Beeld: gegevensblad (standaard), ontwerp, afdrukvoorbeeld, draaitabel of -grafiek
      • Gegevensmodus: toevoegen, bewerken (standaard) of alleen lezen

De volgende reeks betreft filter, query, zoekopdracht.

  • AlleRecordsWeergeven (ShowAllRecords): verwijdert alle toegepaste filters
  • FilterInstellen: om de records in het formulier te filteren.
    • Argumenten:
      • Filternaam: geef de filter een duidelijke naam
      • Where: geef de voorwaarde op, je kan rechts op de knop voor de Opbouwfunctie Voor Expressies klikken om hulp te krijgen
      • Besturingselement: element waarin gefilterd moet worden
  • FilterSorteervolgordeOngedaanMaken: hef alle filters en sorteervolgordes op
  • FilterToepassen (ApplyFilter):
    • Argumenten:
      • Filternaam: naam van de query met de filter
      • WHERE-voorwaarde: typ een SQL-voorwaarde (ipv een query te gebruiken)
      • Naam van besturingselement: alleen van toepassing als je een subformulier of subrapport wil filteren in plaats van het venster zelf
  • QueryOpenen: open de opgegeven query
    • Argumenten:
      • Querynaam: naam van de te openen query
      • Beeld: gegevensblad (standaard), ontwerp, afdrukvoorbeeld, draaitabel of -grafiek
      • Gegevensmodus: toevoegen, bewerken (standaard) of alleen lezen
  • QueryOpnieuwUitvoeren: geef de naam in van het besturingselement waarvoor de query opnieuw uitgevoerd moet worden.
  • RecordVernieuwen: vernieuw het huidige record
  • RecordZoeken (FindRecord): zoek in een geopende tabel op basis van een waarde in één van de velden
    • Argumenten:
      • Zoeken Naar (verplicht): de waarde of expressie waarnaar gezocht moet worden
      • Waar: vergelijk de zoekterm met de hele veldinhoud, een willekeurig deel ervan of het eerste deel
      • Identieke Hoofdletters/Kleine Letters: moet de opdracht onderscheid maken tussen hoofdletters en kleine letters?
      • Zoeken: de zoekrichting is alles doorzoeken, alleen de voorafgaande (Omhoog) of alleen de volgende (Omlaag) records.
        • Het effect van deze instelling is afhankelijk van de instelling bij Eerste Zoeken.
      • Zoeken Zoals Weergegeven: zoeken naar de waarde zoals die in de tabel is opgeslagen of zoals ze op het scherm getoond wordt. Percentages worden bv. opgeslagen in de vorm van kommagetallen.
      • Alleen Huidig Veld: doorzoek wel/niet alle velden. Het zoekproces verloopt sneller als per record maar één veld wordt doorzocht.
      • Eerste Zoeken: zoek vanaf het eerste record (Ja) of vanaf de huidige positie (Nee).
  • Vernieuwen (Requery): update het betreffend object, zodat de recentste gegevens zichtbaar zijn
  • VolgendeRecordZoeken: voer de laatste opdracht van Zoeken terug uit
  • VolgordeInstellenOp:
    • Argumenten:
      • Sorteren op: vereiste sorteervolgorde
      • Naam van Besturingselement:
  • ZoekenNaarRecord:
    • Argumenten:
      • Objecttype: voor het actieve object geef je niets op, anders kies je Tabel, Query, Formulier of Rapport
      • Objectnaam: niets of naam van het object dat het te zoeken record bevat
      • Record: ga naar een bepaald record of geef een WHERE-Voorwaarde op
      • WHERE-voorwaarde: geef i.p.v. een bepaald record hier een voorwaarde als SQL-expressie op

Dan komen de gebruikersinterfaceopdrachten:

  • Berichtvak: om een waarschuwing of andere informatie aan de gebruiker te tonen.
    • Argumenten:
      • Bericht: de tekst (niet tussen aanhalingstekens). Drie regels zijn mogelijk: titel@tekst@tekst
      • Pieptoon (Beep): bij het verschijnen van het berichtvenster klinkt wel/niet een pieptoon
      • Type: geen icoon, kritieke fout (rode cirkel met X), waarschuwing? (tekstballon met ?), waarschuwing! (tekstballon met !) of informatie (tekstballon met kleine 'i')
      • Titel: tekst op de titelbalk van het berichtvenster
  • BladerenNaar:
    • Argumenten:
      • Objecttype: wil je een formulier of een rapport openen?
      • Objectnaam: naam van het formulier of rapport
      • Pad naar Subformulier: als het object een subform/rapport bevat, geef je dat op: hoofdform > subform
      • Where-Voorwaarde: typ een SQL-expressie met de filtervoorwaarde
      • Pagina: bij een doorlopend formulier dat uit meer pagina's bestaat, kan je hier de gewenste opgeven
      • Gegevensmodus: toevoegen, bewerken of alleen lezen
  • MenuOpdrachtInstellen:
    • Argumenten:
      • Menu-Index: bij het hoeveelste menu moet deze opdracht komen? Begint met 0.
      • Opdracht-Index: op de hoeveelste plaats in het menu komt deze opdracht?
      • Vervolgopdrachtindex: eventueel zit de opdracht in een submenu
      • Markering: hoe ziet de opdracht eruit en is die beschikbaar of niet
  • MenuToevoegen:
    • Argumenten:
      • Menunaam: tekst die in het menu verschijnt
      • Menumacronaam: naam van de macrogroep waarin de menu-opdrachten staan
      • Statusbalkbericht: eventueel kan je op de statusbalk een bericht laten verschijnen
  • NavigatiedeelvensterVergrendelen: vul Ja of Nee om resp. wel of niet te vergrendelen
  • NavigerenNaar:
    • Argumenten:
      • Categorie: categorie in het navigatiedeelvenster waaronder je iets wil selecteren
      • Groep: groep in het navigatiedeelvenster waarin het gewenste object staat
  • Opnieuw: voer de laatste actie opnieuw uit
  • RecordOngedaanMaken: de laatste actie van de gebruiker ongedaan maken
  • WeergegevenCategorieënInstellen:
    • Argumenten:
      • Weergeven: de hieronder opgegeven categorie is wel of niet zichtbaar
      • Categorie: het objecttype dat wel of niet getoond moet worden in het navigatiedeelvenster

Vervolgens de acties voor gegevens importeren/exporteren:

  • ContactpersoonVanOutlookToevoegen: voert de menu-opdracht uit om een contactpersoon uit Outlook toe te voegen
  • DatabaseobjectVerzendenViaEmail (SendObject:
    • Argumenten:
      • Objecttype: type van het object dat je wil mailen
      • Objectnaam: naam van het object dat je wil mailen
      • Uitvoerindeling: niets of tekst
      • Naar: e-mailadres of naam van de ontvanger(s)
      • CC: e-mailadres(sen) van ontvangers in CC
      • BCC: e-mailadres(sen) van ontvangers in "blind CC"
      • Onderwerp: tekst die op de onderwerpregel moet verschijnen
      • Bericht: bericht van je mail
      • Bericht Bewerken: kies of je het bericht nog wil bewerken in de e-mailtoepassing of dat de mail direct verstuurd mag worden
      • Sjabloonbestand: eventueel kan je pad-met-naam opgeven van de te gebruiken sjabloon
  • ExporterenMetOpmaak:
  • OpslaanAlsOutlookContactpersoon:
  • UitvoerenNaarStandaardbrieven:

De volgende categorie zijn de gegevensinvoerbewerkingen:

  • LijstitemsBewerken:
  • RecordOpslaan:
  • RecordVerwijderen:

Dan komen de macro-opdrachten:

  • AlleMacrosStoppen:
  • AlleTijdelijkeVariabelenVerwijderen:
  • BijFout (OnError): wat moet er gebeuren als er een fout optreedt tijdens de macrouitvoering?
    • Argumenten:
      • Ga Naar: keuze tussen Volgende = de volgende macroregel, Macronaam = ga verder met die macro en Mislukt = stop de macro en geef de foutmelding door
      • Macronaam: naam van de macro in de huidige macrogroep die de fouten afhandelt
  • GebeurtenisAnnuleren (CancelEvent):
  • GegevensmacroUitvoeren:
  • LocaleVarInstellen:
  • MacrofoutWissen (ClearMacroError):
  • MacroStarten: start een benoemde macro
    • Argumenten:
      • Macronaam: naam van de te starten macro
      • Aantal Herhalingen: maximum aantal keer dat de macro uitgevoerd moet worden
      • Herhalingsexpressie: expressie die resulteert in Waar of Onwaar; in het tweede geval stopt de macro
  • MacroStoppen (StopMacro):
  • MenuOpdrachtUitvoeren:
  • ProcedureUitvoeren:
  • StapVoorStap:
  • TijdelijkeVariabeleInstellen (SetTempVar): maak een nieuwe variabele
  • TijdelijkeVariabeleVerwijderen (RemoveTempVar): verwijder de variabele uit het werkgeheugen

Er zijn ook enkele systeemopdrachten:

  • AccessAfsluiten:
  • DatabaseSluiten (CloseDatabase):
  • Pieptoon (Beep):
  • ZandloperaanwijzerWeergeven (Hourglass:

Tenslotte nog de acties voor vensterbeheer:

  • FormaatVanVensterHerstellen (Restore):
  • VensterMaximaliseren (Maximize):
  • VensterMinimaliseren (Minimize):
  • VensterSluiten:
  • VensterVerplaatsenEnVenstergrootteWijzigen:

Onder In deze database vind je de reeds bestaande macro's en de gebeurtenis waarbij ze horen.

7.1.2. De overige acties

Activeer je in het macrovenster de optie Alle Acties Weergeven, dan worden volgende acties toegevoegd aan de lijst:

In categorie databaseobjecten:

  • ObjectHernoemen:
  • ObjectKopiëren (CopyObject): maak een kopie van het betreffende object
  • ObjectOpslaan:
  • ObjectVerwijderen (DeleteObject: verwijder het betreffende object
  • WaardeInstellen: geef een nieuwe waarde aan een besturingselement in een formulier of rapport
    • Argumenten:
      • Item: naam van het veld, besturingselement of eigenschap (bv: Forms!formNaam!elemNaam.eigenschap) die je een nieuwe waarde wil geven
      • Expressie (zonder =): de waarde die moet worden ingesteld

Eentje in categorie Filter/Query/Zoekopdracht, namelijk:
SQLUitvoeren (RunSQL: voet het SQL-statement uit; dat kan zowel een selectie als data manipulatie zijn.

Eveneens één actie in categorie Gebruikersinterfaceopdrachten:
WerkbalkWeergeven:

Bij gegevens importeren/exporteren staan er meer:

  • DataImporterenExporteren:
  • OpgeslagenImportExportUitvoeren:
  • SharePointLijstImporteren:
  • SpreadsheetImporterenExporteren:
  • TekstImporterenExporteren:

Vervolgens twee acties bij de macro-opdrachten:

  • Echo:
  • VisualBasicModuleOpenen:

De laatsten staan bij de systeemopdrachten:

  • Afdrukken:
  • ApplicatieUitvoeren:
  • BerichtenInstellen:
  • SharePointLijstOpenen:
  • SharePointPrullenbakOpenen:
  • ToetsenVerzenden:

7.2. Een macro toewijzen en uitvoeren

Een macro wordt uitgevoerd als je erop dubbelklikt in het navigatiedeelvenster of als de gebeurtenis optreedt waaraan die macro gekoppeld is.
Zit er een fout in de macro, dan verschijnt de boodschap Actie is Mislukt. Soms kan je de fout dadelijk oplossen, soms is dat niet zo evident. Dan kan het handig zijn om in het macrovenster de optie Stap voor Stap te gebruiken, om de foute stap op te sporen.

7.2.1. Een macro toewijzen aan een gebeurtenis

Vooral in een formulier treden heel wat gebeurtenissen op: typen, klikken, openen, wijzigen, opslaan, enz.
In een rapport gebruik je vooral de gebeurtenissen Bij Openen, Bij Geen Gegevens en Bij Sluiten.
Acties aan zo'n gebeurtenis toewijzen is eenvoudig:

  1. Open het formulier of rapport in ontwerpweergave
  2. Activeer zo nodig het eigenschappenvenster via hulplint Ontwerp en kies het tabblad Gebeurtenis.
  3. Klik in het vak bij de gewenste gebeurtenis en:
    • klik op het pijltje en kies in de lijst de naam van een onafhankelijke macro;
    • klik op de drie puntjes en stel een ingebouwde macro of een expressie samen of open het VBA-moduleblad.

Hieronder de formuliergebeurtenissen, zo mogelijk in volgorde van optreden. Courant gebruikte gebeurtenissen zijn vetgedrukt.

Bij het openen van een formulier:

  • Bij openen (open): vooraleer de recordset geladen is
  • Bij laden (load): recordset ligt vast, besturingselementen worden geïnstantieerd
  • Bij wijzigen formaat (resize): tijdens het openen óf als het formaat achteraf gewijzigd wordt
  • Bij activeren (activate): het formulier krijgt de focus, wordt het actieve venster
  • Bij focus (gotFocus): treedt enkel op als het formulier geen ingeschakelde besturingselementen bevat; is dat wel het geval, dan krijgt het eerste besturingselement in de tabvolgorde de focus
  • Bij aanwijzen (current): gebeurt telkens een ander record het actieve wordt

Tijdens het werken:

  • Bij muis verplaatsen (mouseMove): de muiscursor beweegt ergens binnen de randen van het formulier
  • Bij muiswiel (mouseWheel): de gebruiker scrollt via het muiswieltje
  • Bij muis omlaag (mouseDown): de gebruiker drukt een muisknop in boven een leeg gebied op het formulier of op de recordkiezer
  • Bij muis omhoog (mouseUp): de gebruiker laat een muisknop los
  • Bij klikken (click): de gebruiker klikt in het formulier zelf, niet op een besturingselement
  • Bij dubbelklikken (dblClick): de gebruiker dubbelklikt in het formulier, niet op een besturingselement
  • Bij toets omlaag (keyDown): het formulier of een besturingselement heeft de focus en de gebruiker drukt op een toets
  • Bij toets indrukken (keyPress): het toetsenbord geeft het teken van de ingedrukte toets door
  • Voor invoegen (beforeInsert): de gebruiker typt het eerste teken in een nieuw record
  • Bij gewijzigd (dirty): de gebruiker heeft de inhoud van een besturingselement gewijzigd
  • Bij toets omhoog (keyUp): de gebruiker laat een ingedrukte toets los
  • Bij ongedaan maken (undo): de gebruiker maakt een wijziging ongedaan
  • Voor bijwerken (beforeUpdate): de gebruiker heeft gegevens gewijzigd, maar de wijzigingen werden nog niet opgeslagen
  • Na bijwerken (afterUpdate): de gebruiker heeft gegevens gewijzigd en drukt Tab of Enter of slaat het record op
  • Na invoegen (afterInsert): het nieuwe of gewijzigde record is opgeslagen
  • Bij verwijderen (delete): de gebruiker drukt op toets Delete of een knop 'Verwijderen'
  • Bevestigen voor verwijderen (beforeDelConfirm): vindt plaats nadat de gebruiker een record verwijderde maar vóór het dialoogvenstertje 'Record Verwijderen?" verschijnt
  • Bevestigen na verwijderen (afterDelConfirm): vindt plaats nadat de gebruiker in het dialoogvenstertje 'Record Verwijderen?' op een knop klikte
  • Bij filter: de gebruiker opent een filtervenster
  • Bij filter toepassen (applyFilter): de gebruiker heeft net het filtervenster gesloten, maar het formulier wordt nog niet terug getoond
  • Bij timer: treedt op telkens een timerinterval (zie volgende eigenschap) verstreken is
  • Timerinterval: in milliseconden (standaard 0)
  • Bij fout (error): er treedt een runtime-fout op terwijl het formulier de focus heeft
  • Toetsvoorbeeld: standaard Nee; toetsgebeurtenissen worden door het besturingselement opgevangen, niet het formulier zelf

Het formulier bevat een draaitabel of draaigrafiek:

  • Bij selectiewijziging (selectionChange): de gebruiker maakt een nieuwe selectie in een draaitabel of draaigrafiek
  • Voor plaatsing (beforeRender): vindt plaats alvorens een 'chartObject' in de draaigrafiekweergave wordt geplaatst
  • Na plaatsing (afterRender): vindt plaats nadat een chartObject in de draaigrafiekweergave werd geplaatst
  • Na laatste plaatsing (afterFinalRender): vindt plaats nadat alle elementen in de opgegeven draaigrafiekweergave zijn geplaatst
  • Na lay-out (afterLayout): vindt plaats nadat de lay-out van alle grafieken in de opgegeven draaigrafiekweergave is bepaald, maar voordat de grafieken worden geplaatst
  • Bij wijziging draaitabel (pivotTableChange): vindt plaats als het opgegeven veld, de veldset of het totaal in de draaitabelweergave wordt toegevoegd of verwijderd
  • Bij weergavewijziging (viewChange): vindt plaats als de opgegeven draaigrafiekweergave of draaitabelweergave wordt vernieuwd
  • Bij verbinden (onConnect): de opgegeven draaitabelweergave wordt verbonden met de gegevensbron
  • Voor query (beforeQuery): vindt plaats als de opgegeven draaitabelweergave een query uitvoert op de gegevensbron
  • Bij query: er moet een query op de draaitabelweergave worden uitgevoerd
  • Bij gegevenswijziging (dataChange): een eigenschap of gegeven in de draaitabelweergave werd gewijzigd
  • Bij wijziging gegevensverzameling (dataSetChange): de gegevensbron van een draaitabel of -grafiek werd gewijzigd
  • Bij verbreken verbinding (onDisconnect): de verbinding tussen de opgegeven draaitabelweergave en een gegevensbron wordt verbroken
  • Voor scherminfo (beforeScreenTip): vindt plaats voordat scherminfo wordt weergegeven voor een element in een draaigrafiekweergave of draaitabelweergave

Bij het sluiten van het formulier:

  • Bij uit geheugen (unload): de gebruiker (of een macro) sluit het formulier
  • Bij focus verloren (lostFocus): treedt enkel op als het formulier geen ingeschakelde besturingselementen bevat; is dat wel het geval, dan verliest het laatste besturingselement in de tabvolgorde de focus
  • Bij uitschakelen (deactivate): het formulier verliest de focus
  • Bij sluiten (close): het formulier verdwijnt van het scherm

En nog wat speciale gevallen:

  • Bij inschakelen opdracht (commandEnabled): vindt plaats als het opgegeven onderdeel van Microsoft Office Web Components vaststelt dat de opgegeven opdracht ingeschakeld is
  • Bij markeren opdracht (commandChecked): vindt plaats als het opgegeven onderdeel van Microsoft Office Web Components vaststelt dat de opgegeven opdracht gemarkeerd is
  • Bij opdracht voor uitvoeren (commandBeforeExecute): treedt op vooraleer de opdracht bij parameter 'Command' wordt uitgevoerd
  • Bij uitvoeren opdracht (commandExecute): de opdracht bij parameter 'Command' werd uitgevoerd

7.2.2. Een macro toewijzen aan een knop op een formulier

Een knop zet je op een formulier meestal in de kop- of voettekstsectie; anders wordt de knop voor elk detailrecord herhaald.

  1. Open het formulier in ontwerpweergave en activeer sublint Hulpmiddelen voor Formulieren – Ontwerp.
  2. Schuif de ruimte voor de koptekst of de voettekst open, waar je de knop wil zetten.
  3. Klik op het vierde besturingselement, Knop en teken de knop met klik-sleep op de gewenste locatie.
  4. Normaal start nu de wizard en kan je de gewenste actie of macro aan de knop toewijzen.
  5. Activeer zonodig het eigenschappenvenster van de knop en geef de knop een duidelijke naam (tabblad Overige). Opschrift en verdere opmaak stel je in op tab Opmaak.

Zonder wizard zal je een macro toewijzen aan gebeurtenis Bij Klikken van de knop.

7.2.3. Een macro toewijzen aan een optie op een aangepast lint

Heb je een macro die je aan het Accesslint wil toevoegen? OK.

  1. Creëer de macro als onafhankelijk object, via lint MakenMacro dus.
  2. Kies Bestand – Opties en activeer tabblad Lint Aanpassen.
  3. Klik rechtsbeneden op de knop Nieuw Tabblad om een eigen, aangepast lint toe te voegen.
    • Rechtsklik op het nieuwe hoofdtabblad in de lijst en kies Naam Wijzigen om er een duidelijke naam aan te geven.
  4. Het nieuwe tabblad bevat automatisch een eerste groep; rechtsklik erop om de naam te wijzigen.
  5. Linksboven, bij Kies Opdrachten Uit selecteer je Macro's en dan kan je het macroobject naar de eerste groep van het aangepaste lint slepen.

7.3. De gebeurtenissen

Als de gebruiker ergens klikt, rechtsklikt, typt, enz. treedt een gebeurtenis (event) op. Access zal heel wat gebeurtenissen automatisch afhandelen, maar als je de gebruiker precies de acties wil voorschotelen die gewenst zijn, zal je zelf gebeurtenisprocedures moeten samenstellen.

Access maakt onderscheid tussen acht types van gebeurtenissen.

7.3.1. Gegevensgebeurtenissen

Zodra je gegevens invoert, aanpast of wist, vind een gegevensgebeurtenis plaats. Die gebeurtenis kan betrekking hebben op het besturingselement zelf of op het formulier waarin ze optreedt.

De gebeurtenissen op besturingselementen zijn:

  • Wijzigen: de inhoud van een tekstvak wijzigt of de gebruiker maakt een keuze in een keuzelijst. Pas op: kan tot een oneindige lus leiden.
  • Gewijzigd: het actuele record werd aangepast sinds het voor het laatst opgeslagen werd
  • VoorBijwerken (beforeUpdate): de gebruiker heeft gegevens gewijzigd, maar de wijzigingen werden nog niet opgeslagen. Handig om gegevens te valideren vooraleer ze opgeslagen worden.
  • NaBijwerken (afterUpdate): de gebruiker heeft gegevens gewijzigd en drukt Tab of Enter of slaat het record op
  • NietInLijst: de gebruiker typt een waarde die niet in de keuzelijst voorkomt
  • OngedaanMaken: de gebruiker klikte op Ongedaan Maken, maar die actie werd nog niet uitgevoerd
  • Bijgewerkt: een OLE-object werd gewijzigd in de brontoepassing

De gebeurtenissen die rechtstreeks in een formulier optreden zijn:

  • VoorInvoegen: de gebruiker begint gegevens te typen in een nieuw record, dat nog niet opgeslagen werd
  • NaInvoegen: nadat een nieuw record aan de database toegevoegd werd
  • BevestigenVoorVerwijderen: de gebruiker koos om records te verwijderen, maar de vraag om bevestiging is nog niet gekomen
  • Verwijderen: het record zal verwijderd worden, maar de gebruiker heeft dit nog niet bevestigd. Access zet het record in een tijdelijke buffer.
  • BevestigenNaVerwijderen: treedt op nadat je Ja of Nee antwoordt op de vraag van Access of je een record wil verwijderen
  • Huidige:het formulier werd net geopend of de focus werd naar een ander record verplaatst, dat nu het 'huidige' wordt

Sommige gebeurtenissen hebben exclusief betrekking op een formulier in draaitabel of draaigrafiekweergave:

  • VoorQuery: vooraleer de gebruiker een query uitvoert die de datum ophaalt voor een draaitabel
  • Query: treedt op nadat de query uitgevoerd werd die gegevens ophaalt voor de draaitabel
  • WijzigingDraaitabel: de gebruiker wijzigde de draaitabel
  • Gegevenswijziging: de gegevens in een draaitabel worden bewerkt of bijgewerkt
  • VoorPlaatsing: vooraleer de grafische representatie van de datum wordt gegenereerd
  • NaLayout: nadat de onderdelen van een draaigrafiek aan de grafiek werden toegewezen
  • NaLaatstePlaatsing: na het genereren van de grafische representatie van de datum
  • NaPlaatsing: nadat de grafische representatie van de datum aangepast werd
  • WijzigingGegevensverzameling: de gegevens in een draaigrafiek worden bewerkt of bijgewerkt

7.3.2. Foutgebeurtenissen

Access bevat twee foutgebeurtenissen:

  • Fout: er gebeurt een fout in een formulier of rapport. Niet van toepassing op VBA runtime fouten.
  • Timer: synchroniseert het formulier nadat formuliereigenschap Timerinterval verstreken is

7.3.3. Filtergebeurtenissen

Filtergebeurtenissen zijn alleen van toepassing op formulieren. Ze treden op als je een nieuw filter maakt of een bestaand filter toepast.

  • Filter Toepassen: maak bv. besturingselementen zichtbaar of verberg ze, afhankelijk van de filtercriteria
  • Filter: stel een tekenreeks met lengte nul in als filtervoorwaarde, zodat een nieuw filter niet de oude criteria overneemt

7.3.4. Focusgebeurtenissen

Zo'n gebeurtenis treedt op als een besturingselement of formulier de focus krijgt.
Enkele hebben zowel betrekking op formulieren als rapporten:

  • Activeren: een formulier of rapport wordt het actieve venster
  • Uitschakelen: een formulier of rapport verliest de focus

Dan zijn er gebeurtenissen voor zowel besturingselementen als de formulieren zelf:

  • Focus: als een element de focus krijgt. Een formulier kan enkel de focus krijgen als het geen (ingeschakelde) besturingselementen bevat.
  • FocusVerloren: een element of het formulier zelf heeft de focus verloren, is niet meer het actieve element

Plus gebeurtenissen alleen voor besturingselementen:

  • Kiezen: gebeurt vóór Focus, bv bij het eerste element op een formulier of het volgende in de tabvolgorde
  • Verlaten: gebeurt vóór FocusVerloren, net voor de cursor het element verlaat

Een formulier kan dan nog gebeurtenis BijVerlatenRecord hebben: het record heeft de focus verloren maar het formulier heeft de focus nog niet gekregen.
In een formulier in draaitabelweergave kan SelectieWijziging optreden, als een veld wijzigt dat in een filtervenster geselecteerd is

7.3.5. Toetsenbordgebeurtenissen

Een besturingselement dat focus heeft, ontvangt alle toetsaanslagen die optreden.

  • ToetsOmlaag treedt op wanneer je op een willekeurige toets drukt
  • ToetsIndrukken treedt op als je een toets of toetsencombinatie indrukt ofwel ToetsenVerzenden gebruikt vanuit een macro of SendKey vanuit VBA
  • ToetsOmhoog treedt op na beide vorige gebeurtenissen

In een formulier met een knop waarbij eigenschap Standaard op Ja staat, treedt bij Enter geen toetsenbordgebeurtenis op.

Druk je op BackSpace, dan wordt een ANSI-teken verzonden en treedt ToetsIndrukken op, bij Delete geldt dat niet.

7.3.6. Muisgebeurtenissen

Muisgebeurtenissen zijn van toepassing op besturingselementen in formulieren – of op een formulier zonder ingeschakelde besturingselementen.

  • Klikken is de meest voorkomende muisgebeurtenis, namelijk de linkermuisknop indrukken
  • Dubbelklikken betekent de linkermuisknop 2x kort na elkaar indrukken
  • MuisOmlaag treedt op terwijl je de linkermuisknop ingedrukt houdt
  • MuisVerplaatsen treedt op bij het slepen, d.w.z. je beweegt de muis met ingedrukte linkermuisknop binnen het element
  • MuisOmhoog gebeurt als je de muisknop loslaat
  • MouseWheel treedt op als je het muiswieltje gebruikt om de focus naar een ander element te brengen

7.3.7. Afdrukgebeurtenissen

Afdrukgebeurtenissen treden alleen op in rapporten.

  • Opmaken: Access bepaalt welke gegevens in welke sectie zullen komen, maar ze staan er nog niet.
    • In een groepskoptekst is deze actie van toepassing op alle gegevens in de sectie plus het eerste record van Details, in een groepsvoettekst op alle gegevens in die sectie plus het laatste record in Details.
  • GeenGegevens: Access ontdekt dat het rapport op een lege recordset gebaseerd is
  • Pagina: de pagina is opgemaakt, maar nog niet afgedrukt
  • Afdrukken: de gegevens in de sectie zijn opgemaakt, maar nog niet afgedrukt

Bovendien kunnen in een rapport volgende courante gebeurtenissen optreden:

  • Openen: het rapport wordt geopend, maar er wordt nog geen record getoond
  • Activeren: het rapport krijgt de focus
  • Fout: er treedt een fout op tijdens de uitvoering van de toepassing
  • Uitschakelen: het rapport verliest de focus
  • Sluiten: het rapport wordt gesloten

7.3.8. Venstergebeurtenissen

Venstergebeurtenissen treden op wanneer je een formulier- of rapportvenster opent, sluit of van formaat verandert

  • Openen: het formulier wordt geopend, maar er wordt nog geen record getoond
  • Laden: het formulier is geopend en de records worden getoond
  • Sluiten: het formulier of rapport is niet langer zichtbaar op het scherm en wordt gesloten
  • FormaatWijzigen: de gebruiker wijzigt de afmetingen van het formulier

7.3.9. Volgorde van gebeurtenissen

In een formulier vinden achtereenvolgens volgende gebeurtenissen plaats (zie ook 7.2.1): Openen (form) – Activeren (form) – Huidig (form) – Kiezen (elem) – Focus (elem) – Verlaten (elem) – FocusVerloren (elem) – Unload (form) – Uitschakelen (form) – Sluiten (form).

Bij het ingeven of wijzigen van gegevens in een formulier wordt dat: Focus (elem) – VoorBijwerken (elem) – NaBijwerken (elem) – Verlaten (elem) – FocusVerloren (elem).

Typ je in een tekstvak of maak je een keuze in een keuzelijst, dan treden achtereenvolgens ToetsOmlaag – ToetsIndrukken – Gewijzigd – Wijzigen – ToetsOmhoog plaats. Typte je een nieuwe waarde in een keuzelijst, dan volgt nog NietInLijst en mocht je geen nieuwe waarden typen, treedt Fout op.


7.4. Een pop-up venster maken

Met een formulier en wat macro's of VBA-procedures kan je een dialoogvenster uitwerken bv. met startopties en keuzemogelijkheden.

  1. Kies op lint Maken de knop Formulierontwerp.
    • Je krijgt een leeg formulier in ontwerpweergave.
  2. Teken de nodige besturingselementen (knoppen, keuzelijsten of -rondjes, enz.) op het formulier via sublint Hulpmiddelen voor Formulieren – Ontwerp.
  3. Geef elk besturingselement een duidelijke naam (voor gebruik in VBA-code) via hun respectievelijk eigenschappenvenster, tab Overige.
  4. Activeer tab Gebeurtenissen en wijs een macro of gebeurtenisprocedure in VBA toe aan de juiste gebeurtenis.
    • Bij een knop is dat bv. Bij Klikken, voor een keuzelijst Bij Wijzigen, enz.
  5. Activeer de Formulierweergave en probeer alle knoppen en keuzes uit.
  6. Formulier volledig in orde? Dan maken we er een dialoogvenster van:
    • Open het formulier in ontwerpweergave en activeer het eigenschappenvenster.
    • Stel op tabblad Opmaak in dat je geen schuifbalken wil, geen recordkiezers en geen navigatieknoppen.
    • Activeer tabblad Overige en zet eigenschap Popu-up op Ja; dan blijft het venster op de voorgrond tot het gesloten wordt
    • Zet ook optie Modaal op Ja. Zolang het formulier geopend is, heb je dan geen toegang tot andere databaseobjecten.

7.5. Een navigatieformulier

Het navigatieformulier is de vervanging van het schakelbord uit vroegere versies van Access.
Zoals je kan lezen in oefening Facturatie onder punt 6. zal je meestal verscheidene navigatieformulieren in elkaar passen tot je de totale structuur naar wens bekomt.

Algemene werkwijze:

  1. Sluit alle nog geopende objecten en kies dan op lint Maken de optie Navigatie in sectie Formulieren.
  2. Voorzie verticale tabbladen voor alle "submenu's" en sleep de nodige formulieren en/of rapporten erop. Pas de labels aan naar wens.
  3. Maak tenslotte een navigatieformulier met horizontale tabbladen en voeg daaraan de vorige navigatieformulieren toe. Sla alles op en sluit.
  4. Kies op lint Bestand – Opties en activeer tabblad Huidige Database.
    • Selecteer het navigatieformulier in de keuzelijst bij Formulier Weergeven, zodat dit formulier geopend wordt zodra je de database opent.

7.6. Een aangepast lint

Als je een uitgebreide database maakt, met vele formulieren en rapporten, is het handig om een aangepaste menustructuur te maken om deze objecten te openen.

  1. Creëer macro's om de gewenste objecten te openen:
    • Kies op lint Maken helemaal rechts de knop Macro's.
    • Kies bv. Formulier Openen en selecteer het gewenste formulier.
    • Sluit de macro en geef hem als naam de tekst die in het menu moet verschijnen.
  2. Activeer op lint Bestand – Opties, tabblad Lint Aanpassen.
  3. Klik rechts beneden op de knop Nieuw Tabblad om een nieuwe optie op het lint te laten verschijnen, naast Bestand, Start, Maken, enz.
  4. Klik in de lijst met hoofdtabbladen op de nieuwe optie en dan op knop Naam Wijzigen en geef het nieuwe lint een duidelijke naam.
    • Doe hetzelfde voor de eerste groep die standaard op het lint verschijnt.
  5. Selecteer in de keuzelijst linksboven Opdrachten Kiezen: Macro's.
  6. Klik op de gewenste macronaam, zorg dat in de rechterkolom de juiste groep geselecteerd is en klik in het midden op knop Toevoegen.
  7. Rechtsklik op de nieuwe menuoptie in de rechterkolom en kies Naam Wijzigen om een icoontje te kiezen voor de optie.
  8. Herhaal stap 6 en 7 voor alle opties die je aan het menu wil toevoegen.
 
 
>