En enkelt handling, for eksempel å flytte fra en kontroll på et objekt til en annen kontroll, kan utløse flere forskjellige hendelser som forekommer i en bestemt rekkefølge. Å vite når hendelser oppstår og i hvilken rekkefølge de forekommer i, er viktig fordi det kan påvirke hvordan og når makroene eller hendelsesprosedyrene kjører. Hvis det for eksempel er to hendelsesprosedyrer som skal kjøres i en bestemt rekkefølge, bør du forsikre deg om at hendelsene de er knyttet til, forekommer i samme rekkefølge.
I denne artikkelen
Rekkefølgen på hendelser for kontroller på skjemaer
Hendelser forekommer for kontroller på skjemaer når du flytter fokus til en kontroll, og når du endrer og oppdaterer data i en kontroll.
Obs!: Microsoft Office Access viser hendelsesnavn litt annerledes i Visual Basic Editor enn det den gjør i egenskapsarket og i Makroverktøyet. For eksempel, hendelsen som heter Ved fått fokus i skjemaets eiendomsark og i Macro Builder heter GotFocus i Visual Basic Editor. Eksemplene i denne artikkelen bruker Visual Basic for Applications (VBA)-format for hendelsesnavn.
Slik flytter du fokus til en kontroll
Når du flytter fokus til en kontroll i et skjema (for eksempel ved å åpne et skjema som inneholder én eller flere aktive kontroller, eller ved å flytte fokus til en annen kontroll på det samme skjemaet), forekommer Enter- og GotFocus-hendelser i denne rekkefølgen:
Angi GotFocus
Når du åpner et skjema, så forekommer Enter- og GotFocus-hendelser etter hendelsene som er knyttet til åpning av skjemaet (for eksempel Open, Activate og Current), som følger:
Åpne (skjema) Aktivere (skjema) Gjeldende (skjema) Enter (kontroll) GotFocus (kontroll)
Når fokuset forlater et skjema (for eksempel når du lukker et skjema som inneholder en eller flere aktive kontroller, eller når du flytter til en annen kontroll på samme skjema), forekommer Exit- og LostFocus-hendelsene i denne rekkefølgen:
Avslutt LostFocus
Når du lukker et skjema, forekommer Exit- og LostFocus-hendelsene før hendelsene forbundet med å lukke skjemaet (for eksempel Unload, Deactivate og Close), som følger:
Avslutt (kontroll) LostFocus (kontroll) Fjern (skjema) Deaktiver (skjema) Lukk (skjema)
Endre og oppdatere data i en kontroll
Når du skriver inn eller endrer data i en kontroll på et skjema, og deretter flytter fokuset til en annen kontroll, forekommer BeforeUpdate- og AfterUpdate-hendelsene:
BeforeUpdate Afte rUpdate
Exit- og LostFocus-hendelser for en kontroll når verdiendringer forekommer etter BeforeUpdate- og AfterUpdate-hendelser:
BeforeUpdate AfterUpdate Exit LostFocus
Når du endrer teksten i en tekstboks, eller i tekstboksdelen i en kombinasjonsboks, forekommer Change-hendelsen. Denne hendelsen forekommer når innholdet i kontrollen endres, men før du flytter fokus til en annen kontroll eller post (og derfor før BeforeUpdate- og AfterUpdate-hendelser forekommer). Følgende rekkefølge av hendelser forekommer for hver tast du trykker i en tekstboks eller i tekstboksdelen av en kombinasjonsboks:
KeyDown KeyPress Dirty Endre KeyUp
NotInList-hendelsen forekommer hvis du angir en verdi i en kombinasjonsboks som ikke finnes i kombinasjonsbokslisten, og prøver deretter å flytte fokus til en annen kontroll eller post. NotInList-hendelsen forekommer etter tastaturhendelsene og Change-hendelser for kombinasjonsboksen, men før hendelsene for eventuelle andre kontroller eller skjemaet. Hvis LimitToList-egenskapen for kombinasjonsboksen er satt til Ja, forekommer Error-hendelsen for skjemaet umiddelbart etter NotInList-hendelsen:
KeyDown KeyPress Dirty Endre KeyUp NotInList 0-feil
Rekkefølgen på hendelser for poster på skjemaer
Hendelser som forekommer for poster i skjemaer når du flytter fokus til en annen post, oppdaterer data i en post, sletter en eksisterende oppføring eller poster eller oppretter en ny post.
Flytte fokus til poster og oppdatere dataene i poster
Når du flytter fokus til en eksisterende oppføring i et skjema, skriver inn eller endrer data i posten, og deretter flytter fokus til en annen post, forekommer følgende rekkefølge av hendelser for skjemaet:
Gjeldende (skjema) BeforeUpdate (skjema) AfterUpdate (skjema) Current (skjema)
Når du forlater posten der dataene er endret, men før du skriver inn den neste posten, forekommer Exit- og LostFocus-hendelsene for kontrollen som har fokuset. Disse hendelser forekommer etter BeforeUpdate- og AfterUpdate-hendelser for skjemaet, som følger:
BeforeUpdate (skjema) AfterUpdate (skjema) Exit (kontroll) LostFocus (kontroll) Current (skjema)
Når du flytter fokus mellom kontrollene i et skjema, forekommer hendelser for hver kontroll. For eksempel forekommer følgende rekkefølge av hendelser når du gjør følgende:
-
Åpne et skjema, og endre data i en kontroll:
Gjeldende (skjema) Enter (kontroll) GotFocus (kontroll) BeforeUpdate (kontroll) AfterUpdate (kontroll)
-
Flytter fokus til en annen kontroll:
Avslutt (kontroll1) LostFocus (kontroll1) Enter (kontroll2) GotFocus (kontroll2)
-
Flytter fokus til en annen post:
BeforeUpdate (skjema) AfterUpdate (skjema) Exit (control2) LostFocus (control2) Current (skjema)
Sletting av poster
Når du sletter en post, forekommer følgende hendelser for skjemaet, og Microsoft Office Access viser en dialogboks som ber deg om å bekrefte slettingen:
Slett BeforeDelConfirm AfterDelConfirm
Hvis du avbryter Delete-hendelsen, forekommer ikke BeforeDelConfirm- og AfterDelConfirm-hendelsene, og dialogboksen vises ikke.
Opprette en ny post
Når du flytter fokus til en ny (tom) post i et skjema, og deretter opprette en ny oppføring ved å skrive inn data i en kontroll, oppstår følgende rekkefølge av hendelser:
Gjeldende (skjema) Enter (kontroll) GotFocus (kontroll) BeforeInsert (skjema) AfterInsert (skjema)
BeforeInsert-hendelsen (skjema) utløses så snart du begynner å skrive i kontrollen. AfterInsert-hendelsen (skjema) utløses når du forlater posten.
BeforeUpdate- og AfterUpdate-hendelser for kontrollene i skjemaet, og for den nye posten, forekommer etter BeforeInsert-hendelsen, og før AfterInsert-hendelsen.
Rekkefølgen på hendelser for skjemaer og delskjemaer
Hendelser forekommer for skjemaer når du åpner eller lukker et skjema, flytter mellom skjemaer eller arbeider med data i et skjema eller delskjema.
Åpne og lukke et skjema
Når du åpner et skjema, forekommer følgende rekkefølge av hendelser for skjemaet:
Åpne last inn endre størrelse på aktiver gjeldende
Hvis det ikke finnes noen aktive kontroller på skjemaet, forekommer GotFocus-hendelsen for skjemaet etter Activate-hendelsen, men før Current-hendelsen.
Når du lukker et skjema, forekommer følgende rekkefølge av hendelser for skjemaet:
Fjern Deaktiver Lukk
Hvis det ikke finnes noen aktive kontroller på skjemaet, forekommer LostFocus-hendelsen for skjemaet etter Unload-hendelsen, men før Deactivate-hendelsen.
Flytting mellom skjemaer
Når du bytter mellom to åpne skjemaer, forekommer Deactivate-hendelsen for det første skjemaet, og Activate-hendelsen for det andre skjemaet:
Deaktivere (skjema1) Aktivere (skjema2)
Deactivate-hendelsen for et skjema forekommer også når du bytter fra skjemaet til en annen objekt-fane i Access. Deactivate-hendelsen forekommer imidlertid ikke når du bytter til en dialogboks, til et skjema hvor PopUp-egenskapen er satt til Ja eller til et vindu i et annet program.
Obs!: Open-hendelsen forekommer ikke hvis du flytter fokus til et skjema som allerede er åpen, selv om du har flyttet fokuset til det samme skjemaet ved å utføre en OpenForm-handling.
Arbeide med data på et skjema
Skjema og kontroll hendelser forekommer når du flytter mellom poster i skjemaet, og endrer på data. Når du eksempelvis åpner et skjema, forekommer følgende rekkefølge av hendelser:
Åpne (skjema) Last inn (skjema) Endre størrelse (skjema) Aktiver (skjema) Gjeldende (skjema) Enter (kontroll)0 GotFocus (kontroll)
På samme måte som når du lukker et skjema, forekommer følgende rekkefølge av hendelser:
Avslutt (kontroll) LostFocus (kontroll) Fjern (skjema) Deaktiver (skjema) Lukk (skjema)
Hvis du har endret dataene i en kontroll, forekommer BeforeUpdate- og AfterUpdate-hendelsene for både kontrollen og skjemaet før Exit-hendelsen for kontrollen.
Arbeide med delskjemaer
Når du åpner et skjema som inneholder et delskjema, lastes delskjemaet og tilhørende poster før hovedskjemaet. Dermed forekommer hendelsene for delskjemaet og de tilhørende kontrollene (som for eksempel Open, Current, Enter, og GotFocus) før hendelsene for skjemaet. Activate-hendelsen forekommer imidlertid ikke for delskjema. Når du åpner et hovedskjema, forekommer derfor en Activate-hendelse bare for hovedskjemaet.
På samme måte som når du lukker et skjema som inneholder et delskjema, blir delskjemaet og oppføringene fjernet etter skjemaet. Deactivate-hendelsen forekommer ikke for delskjema. Når du lukker et hovedskjema, forekommer derfor en Deactivate-hendelse bare for hovedskjemaet. Hendelsene for kontrollene, skjemaet og delskjemaet forekommer i følgende rekkefølge:
-
Hendelser for kontrollene til delskjema (for eksempel Exit og LostFocus)
-
Hendelser for skjemakontroller (inkludert delskjemakontrollen)
-
Hendelser for skjemaet (for eksempel Deactivate og Close)
-
Hendelser for delskjemaet
Obs!: Fordi hendelsene for et delskjema forekommer etter at hovedskjemaet er lukket, er det visse hendelser som ikke skjer, som for eksempel å avbryte lukkingen av hovedskjemaet fra en hendelse i delskjemaet. Du må kanskje flytte denne typen valideringstester til en hendelse på hovedskjemaet.
Rekkefølgen på hendelser for tastetrykk og museklikk
Tastaturhendelser forekommer for skjemaer og kontroller når du trykker på tastene, eller sender tastetrykk når skjemaet eller kontrollen har fokus. Musehendelser forekommer for skjemaer, skjemainndelinger og kontroller på skjemaer når du klikker på museknappene mens musepekeren er i et skjema, en inndeling eller en kontroll. Musehendelser forekommer også når du flytter musepekeren over et skjema, en inndeling eller en kontroll.
Tastaturhendelser
Når du trykker på og slipper en tast mens en kontroll på et skjema har fokuset (eller bruker SendKeys-handlingen eller oversikt for å sende et tastetrykk), forekommer følgende rekkefølge av hendelser:
KeyDown KeyPress KeyUp
Når du trykker på og slipper en tast eller sender et tastetrykk til ANSI-tegnsett, forekommer alle KeyDown-, KeyPress-, og KeyUp-hendelsene. Hvis du trykker på og holder nede en ANSI-nøkkel, gjentar KeyDown- og KeyPress-hendelsene seg gjentatte ganger (KeyDown, KeyPress, KeyDown, KeyPress, og så videre) til du slipper nøkkelen, da forekommer KeyUp-hendelsen.
Hvis du trykker på og slipper en ikke-ANSI-nøkkel, forekommer KeyDown- og KeyUp-hendelsene. Hvis du trykker på og holder nede en ikke-ANSI-tast, forekommer KeyDown-hendelsen gjentatte ganger til du slipper nøkkelen, og deretter forekommer KeyUp-hendelsen.
Hvis et tastetrykk utløser en annen hendelse for en kontroll, forekommer hendelsen etter KeyPress-hendelsen, men før KeyUp-hendelsen. Hvis et tastetrykk for eksempel endrer tekst i en tekstboks, som utløser en Change-hendelse, forekommer følgende rekkefølge av hendelser:
KeyDown KeyPress Endre KeyUp
Hvis et tastetrykk gjør at fokuset flyttes fra én kontroll til en annen kontroll, forekommer KeyDown-hendelsen for den første kontrollen, mens KeyPress og KeyUp-hendelsene forekommer for den andre kontrollen. Hvis du for eksempel endrer data i en kontroll og trykker på TAB-tasten for å flytte til neste kontroll, forekommer følgende sekvenser av hendelser:
-
Første kontroll:
KeyDown BeforeUpdate AfterUpdate Exit LostFocus
-
Andre kontroll:
Angi GotFocus KeyPress KeyUp
Musehendelser
Når du klikker på og slipper en museknapp mens musepekeren er på en kontroll på et skjema, forekommer følgende sekvens av hendelser for kontrollen:
MouseDown MouseUp Klikk
Hvis en kontroll har fokuset, og du klikker på en annen kontroll for å flytte fokuset til denne andre kontrollen, forekommer følgende sekvenser av hendelser:
-
Første kontroll:
Avslutt LostFocus
-
Andre kontroll:
Skriv inn GotFocus MouseDown MouseUp Klikk
Hvis du flytter til en annen post og deretter klikker på en kontroll, forekommer Current-hendelsen for skjemaet før Enter-hendelsen for kontrollen.
Ved å dobbeltklikke på en kontroll, forekommer både Click- og DblClick-hendelsene. Hvis du for eksempel dobbeltklikker på en annen kontroll enn en kommandoknapp, forekommer følgende sekvens av hendelser for kontrollen:
MouseD egen MouseUp Klikk DblClick MouseUp
Når du dobbeltklikker på en kommandoknapp, forekommer den foregående sekvensen av hendelser, etterfulgt av en ny Click-hendelse.
MouseMove-hendelsen for en form, inndeling eller kontroll forekommer når du beveger musepekeren over skjemaet, inndelingen eller kontrollen. Denne hendelsen er uavhengig av andre musehendelser.
Rekkefølgen på hendelser for rapporter og rapportinndelinger
Hendelser forekommer for rapporter og rapportinndelinger når du åpner en rapport for å forhåndsvise den, eller for å skrive den ut. Hendelser skjer også når du deretter lukker den.
Hendelser for rapporter
Når du åpner en rapport for å skrive ut eller for å forhåndsvise, og deretter lukker rapporten eller flytter til en annen objektfane i Access, forekommer følgende hendelsesrekkefølge for rapporten:
Åpne Aktiver Lukk Deaktiver
Når du bytter mellom to åpne rapporter, forekommer Deactivate-hendelsen for det første skjemaet og Activate-hendelsen for det andre skjemaet:
Deaktiver (rapport1) Aktiver (rapport2)
Deactivate-hendelsen for en rapport forekommer også når du bytter fra skjemaet til en annen objekt-fane i Access. Deactivate-hendelsen forekommer imidlertid ikke når du bytter til en dialogboks, til et skjema hvor PopUp-egenskapen er satt til Ja eller til et vindu i et annet program.
Når du åpner en rapport som er basert på en spørring, utløser Access Open-hendelsen for rapporten før den kjører den underliggende spørringen. Som et resultat kan du angi kriteriene for rapporten ved hjelp av en makro- eller hendelsesprosedyre som reagerer på Open-hendelsen. For eksempel kan makro- eller hendelsesprosedyren åpne en egendefinert dialogboks der du angir rapportkriterier.
Hendelser for rapportinndelinger
Når du skriver ut eller forhåndsviser en rapport, forekommer Format- og Print-hendelsene for rapporten etter Open- og Activate-hendelser, og før rapportens Close- eller Deactivate-hendelser:
Åpne (rapport) Aktiver (rapport) Format (rapportinndeling) Skriv ut (rapportinndeling) Lukk (rapport) Deaktiver (rapport)
Sikkerhet Du kan bruke rapportvisning til å aktivere brukerfiltrering av rapporter. Men i motsetning til forhåndsvisning, forekommer ikke format- og utskriftshendelsene i noen inndelinger i rapportvisning. Dette gjelder også for VBA-funksjonsresultater og brukerdefinerte prosedyrer som vises i kontroller (for eksempel etiketttekster, visningsstatus, betinget formatering, endring av størrelse på kontroller og så videre) i disse hendelsene. Derfor må du ikke bruke kode i denne hendelsen til å formatere, skjule eller skrive ut konfidensielle data, som kan bli eksponert. Vi anbefaler at du forhåndsfiltrerer dataene eller deaktiverer forhåndsvisning av rapport ved å angi Egenskapen AllowReportView til Nei.
I tillegg kan følgende hendelser forekommer under eller etter formatering, men før Print-hendelsen:
-
Retreat-hendelsen forekommer når Access vender tilbake til en tidligere inndeling under rapportformatering.
-
NoData-hendelsen forekommer hvis det ikke vises noen poster i rapporten.
-
Page-hendelsen forekommer etter formatering, men før utskrift. Du kan bruke denne hendelsen til å tilpasse utseendet på den trykte rapporten.