Barvna shema: Temna
Trenutno dejavna stran: start » sl » Dokumentacija » Orodja za Microsoft Access » WKL Forms Object Library » troubleshooting » Dogodkovna procedura se nikoli ne pokliče

Dogodkovna procedura se nikoli ne pokliče

Procedura, kot je Grid1_RowClick ali btnSave_Click, obstaja v modulu obrazca, vendar se ob uporabnikovem dejanju na kontrolniku nič ne zgodi – nobena prekinitvena točka ni dosežena, nobeno okno s sporočilom se ne prikaže.

Okolje

Vsi kontrolniki in objekti WKL, vse izdaje, Access za Microsoft 365 (polna različica in izvajalno okolje) ter obrazci UserForm v Excelu in Wordu.

Vzrok

Eden od naslednjih vzrokov, najpogostejši najprej:

  • Modula obrazca ni mogoče prevesti. Modul z napako pri prevajanju na katerem koli mestu ne prejme nobenega dogodka, Access pa tega nikjer ne sporoči, dokler modula ne prevedete: DoCmd.OpenForm, poklican z avtomatizacijo, se vrne, ne da bi odprl obrazec, RunCommand acCmdCompileAndSaveAllModules pa ne sproži napake. Pogost vzrok je ročno natipkana deklaracija z drugačnim številom parametrov, kot jih ima dogodek, ali tip naštevanja (WklUpdateAction …), medtem ko sklic na WKL Forms Object Library manjka.
  • Obrazec nima modula. Ima modul = Ne: Access obrazcu ne posreduje nobenega dogodka nobenega kontrolnika. Zadošča prazen modul.
  • Dejanje je sprožila koda. Večina dogodkov sporoča, kaj naredi uporabnik. Ista sprememba, ki jo naredi koda – SelectedKey = 5, Value = True, MoveNode, Requery – ne sproži nobenega dogodka, tako kot ga ne sproži AfterUpdate polja z besedilom Accessa, ki mu vrednost nastavi koda. Izjeme so navedene pri ustreznem članu: AfterTabChange kontrolnika WklDockLayout (razlog wtcCode), FilterChipRemoved (ByUser = False) in CommandStateChange sledijo tudi spremembam, ki jih naredi koda.
  • Dogodek oblikovanja je izklopljen. NodeFormat, RowFormat in CellFormat se pojavijo samo pri FormatEvents = True (zakaj).
  • Ime se ne ujema. Procedura se mora imenovati <ime kontrolnika>_<dogodek>, in sicer s trenutnim imenom kontrolnika; ko kontrolnik preimenujete, mu stara procedura ne pripada več.
  • WithEvents znotraj procedure ali pa objekta ni več. Pri WklToast in WklLinkManager mora biti spremenljivka WithEvents deklarirana na vrhu modula razreda ali modula obrazca, objekt pa mora biti tam še vedno shranjen (Set mToast = New WklToast), ko se dogodek pojavi.
  • Druga dogodkovna procedura istega kontrolnika se še izvaja. VBA ne posreduje nobenega dogodka objekta, dokler se izvaja procedura za dogodek istega objekta. Ukazi za zapise kontrolnika WklGrid (DeleteSelected, NewRecord …), poklicani znotraj ene od njegovih lastnih dogodkovnih procedur, se zato izvedejo šele, ko se ta procedura konča, tako da njihovi dogodki prispejo; drugi dogodki, sproženi medtem, se izgubijo.

Rešitev

  1. V urejevalniku VBA izberite Debug › Compile <project> in odpravite vse napake, ki jih prikaže; nato v oknu Immediate preverite, ali ? Application.IsCompiled vrne True.
  2. Lastnost obrazca Ima modul nastavite na Da.
  3. Proceduro ustvarite s seznamoma objektov in procedur v oknu s kodo (ali na strani oblikovalnika Dogodki pri drevesnih kontrolnikih in mrežah), da bosta njeno ime in deklaracija pravilna (navodilo).
  4. Za dogodke oblikovanja nastavite FormatEvents = True; pri objektih deklaracijo WithEvents premaknite na raven modula.
  5. Če želite kodo izvesti po dejanju, ki ga sprožite sami, pokličite svojo proceduro neposredno za stavkom, ki dejanje sproži.
sl/wiki/msaccess/comctl/troubleshooting/event-procedure-never-called.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille