Koda VBA se ne prevede
Simptom: build se konča z izhodno kodo 4 in navede enega ali več objektov, katerih koda se ne prevede.
Okolje
Vse različice WKL Office SDK.
Vzrok
Access prevaja celoten projekt VBA naenkrat in ne pove, v katerem modulu je napaka. Gradnja jo zato poišče sama:
odstrani telesa vseh postopkov, nato vsakemu objektu posebej vrne celotno kodo in sporoči objekte, s katerimi
prevajanje ne uspe. Če se ne prevede niti okrnjeni projekt, je napaka v razdelku z deklaracijami ali v glavi
postopka – običajno gre za tip iz sklica, ki manjka v references.json –, sporočeni pa so objekti, katerih
deklaracije prevajanje prekinejo.
Nekatere vzroke preverjanje najde že v izvornih datotekah, preden se Access zažene, in navede datoteko in vrstico;
check in build jih sporočita kot error [Compile] module <ime>, <datoteka>:<vrstica>:
- Deklaracija za prvim postopkom (od WKL Office SDK 0.6.1 naprej). VBA dovoli
Dim,Const, spremenljivke modula (Private/Public),Declare,TypeinEnumsamo v razdelku deklaracij na začetku modula; deklaracija niže prekine prevajanje celotnega projekta. - Spremenljivka, ki ni določena: imenu je dodeljena vrednost (
total = 1,Set rs = …, števec zankeFor), vendar v projektu ni nikjer deklarirano, modul pa imaOption Explicit. Preverjajo se samo imena, ki jim je dodeljena vrednost, v standardnih modulih in modulih razreda. - Ključna beseda ali stavek jezika VBA kot oznaka (
Write:,Name:) ali rezervirana beseda kot ime parametra, spremenljivke ali postopka (ByVal Until As Date). - Modul z imenom projekta VBA (imenom podatkovne zbirke); Access ga ne naloži.
Isto preverjanje se v dodatku za Access izvede z ukazom Preveri kodo in po vsakem shranjevanju v urejevalniku VBA, tam na kodi, kakršna je v urejevalniku (Uporaba dodatka za Access).
Rešitev
- Odprite podatkovno zbirko (
build/<configuration>/<name>.accdbzadnje uspešne gradnje ali tisto, ki je odprta v programu Access) in v urejevalniku VBA izberite Debug > Compile, ki pokaže vrstico z napako. SDK vrstice ne more sporočiti, ker jo pozna samo urejevalnik VBA in jo prikaže le v oknu s sporočilom. - Manjkajoč sklic: dodajte ga v
source/references.json(ali ga nastavite v programu Access in izvozite). - Deklaracija za prvim postopkom: vrstico, navedeno v sporočilu, premaknite navzgor, pred prvi
Sub,FunctionaliPropertymodula. - Spremenljivka, ki ni določena: deklarirajte jo z
Dim(ali na ravni modula) ali popravite napačno zapisano ime. - Oznaka ali ime, ki je ključna beseda: preimenujte ju, na primer v
DonealiFailed. - Dvakrat deklarirano ime (konstanta, spremenljivka ali postopek v dveh modulih ali dvakrat v enem): eno preimenujte ali odstranite.