Prijavite se pomoću Microsofta
Prijavi se ili izradi račun.
Zdravo,
Odaberite drugi račun.
Imate više računa
Odaberite račun putem kojeg se želite prijaviti.

Sadržaj ovdje može se primijeniti na Northwind 2.0 Developer Edition i Starter Edition. 

VBA (Visual Basic for Applications) je programski jezik koji se koristi u svim proizvodima sustava Office. Vba učenje omogućuje vam rad sa svim proizvodima sustava Office (ne samo s programom Access).
Prilikom traženja "how-to" obavezno potražite konkretne primjere programa Access i uvrstite Microsoft Access u pretraživanje. Rješenja za druge proizvode sustava Office često će funkcionirati, ali nema garancije. Microsoft Access je zreli proizvod; to znači da postoji mnogo primjera vani; što je sjajno za vas! 

To znači i da su starije knjige programa Access još uvijek vidljive. Mnoge starije knjige i dalje su dostupne na web-mjestima s knjigama uz samo dio izvornog troška. Na Microsoftovu web-mjestu utvrdite koje verzije programa Access još uvijek podržavaju i idite s tim verzijama.

Resursi za završetak podrške za Office – implementacija sustava Office | Microsoft Learn  

U nastavku su navedene veze na dokumentaciju programa Access u Microsoftu.

Datoteke programa Microsoft Access datoteke su sustava Office. Datoteke sustava Office moraju se nalaziti na "pouzdanom mjestu" ili imati omogućen "sadržaj". Te se stavke smatraju "sigurnima" jer ste ih stvorili ili su došli iz pouzdanog izvora. Provjera ima li pouzdanih mjesta pojavljuje se svaki put kada otvorite bilo koju datoteku sustava Office. Od sada na dalje ćemo to pročitati kao Pouzdano/Omogućeno. NAPOMENA: ako se nova verzija aplikacije objavi i otvori s nepouzdanog mjesta, postupak omogućivanja sadržaja ponovit će se.

Saznajte više o pouzdanim mjestima.: 

Makronaredbe, funkcije i podmjesta način su implementacije poslovne logike u bazu podataka programa Access. Važno je da prije početka shvatite opseg i vidljivost.


Događaji (kao što je klik na kontrolu) na kontrolama na obrascu (npr. gumbi, tekstni okviri, oznake itd.) pokreću druge procese, kao što su dodavanje, brisanje zapisa ili otvaranje obrazaca. Ti se procesi mogu implementirati pomoću makronaredbi ili VBA-a. Northwind Starter Edition uglavnom koristi makronaredbe, a neke VBA u kojima makronaredbe ne mogu izvoditi potrebne funkcije. Northwind Developer Edition prvenstveno koristi VBA. 

Neke vrste kontrola imaju ugrađene čarobnjake za automatsko stvaranje makronaredbe. Dodavanjem naredbenog gumba u obrazac, primjerice, otvara se čarobnjak koji nudi nekoliko mogućnosti funkcija za gumb. Dodavanje kombiniranog okvira otvara čarobnjak koji se može konfigurirati za pronalaženje određenog zapisa na obrascu. 

Navigacijsko okno glavni je način prikaza i pristupa svim objektima baze podataka te se po zadanom prikazuje na lijevoj strani prozora programa Access. 
Navigacijsko okno Northwind prilagođeno je. Stvorili smo prilagođenu kategoriju northwind Starter 2.0. To nam omogućuje organiziranje objekata prema funkcionalnom području.

Ponekad vam je potrebna varijabla da bi postojala nakon što objekt koji je stvorio izađe iz dosega. Pogledajte doseg i vidljivost iznad . To možete učiniti na tri načina: Javne varijable, TempVars i Pohranjivanje vrijednosti u lokalnoj tablici. Mnogi razvojni inženjeri koriste kombinaciju tih značajki. Svaki ima svoje prednosti i mane.  Više o svakome od njih ovdje: 

Javna varijabla VBA modula: 

TempVars: 

Pohrana vrijednosti u lokalnoj tablici

  • Javne varijable i TempVars postoje za trenutnu sesiju i izlaze iz opsega kada je aplikacija zatvorena. No što ako želite zadržati varijable specifične za korisnika u svim sesijama? Te vrste vrijednosti možete pohraniti u lokalnu tablicu. U northwindu 2.0 jedna takva varijabla sprema se u tablicu koja se zove SystemSettings. Vrijednost u tablici jest ShowWelcome. Ta vrijednost programu Access govori želite li vidjeti zaslon dobrodošlice svaki put kada se prijavite ili ne.

Razvojni inženjeri često moraju proslijediti parametre s jednog obrasca na drugi ili iz obrasca u izvješće. Ti parametri prenose važne informacije koje će pozvana funkcija koristiti za konfiguraciju. Drugi obrazac ili izvješće mogu dohvatiti informacije iz prvog obrasca na nekoliko načina. Evo nekoliko načina: 

  1. Drugi obrazac može "pogledati unatrag" na prvi obrazac da bi se neke vrijednosti, moguće, u vidljivoj ili nevidljivoj kontroli.  Na primjer:
    lngCustomerID = Forms!FirstForm!cboCustomerID 

  2. Prvi obrazac može spremiti vrijednosti u globalne varijable ili na TempVars. Na primjer:
    g_lngUserID = Me.cboUserID 
    TempVars.Add "UserID", Me.cboUserID 

Metoda koja se često koristi u izdanju Northwind Developer Edition, kao i u našem profesionalnom životu, koristi se argument OpenArgs tvrtke DoCmd.OpenForm ili OpenReport. Na primjer:

DoCmd.OpenForm "frmCompanyDetail", OpenArgs:=StringFormat("CompanyID={0} &CompanyTypeID={1}", Me.VendorID, ctVendor)

Ovdje kombiniramo dvije tehnike: (1) korištenje OpenArgs za prolaz u vendorID i VendorType i (2) korištenje funkcije StringFormat() za stvaranje, na primjer, ovog niza: 

CompanyID=5&CompanyTypeID=2 

Ovaj niz izgleda vrlo slično nizu upita koji se koristi u pregledniku. Sadrži jedan ili više "parova naziva/vrijednosti" odvojenih znakom ampersand: 

name1=value1&name2=value2


Prednost takvog niza je to što svaka vrijednost ima naziv. Usporedite to s jednostavnijim pristupom u kojem biste postavili OpenArgs samo na "5,2".  U tom bi slučaju bilo potrebno poduzeti napore da bismo saznali što svaka vrijednost označava. Imenovanje svake vrijednosti čini niz upita "samo-opisivanje", što je dobra praksa programiranja.

Na kraju primatelja doCmd.OpenForm obično se nalazimo u događaju Form_Open ili Form_Load i želimo raščlaniti niz OpenArgs u njegove komponente.

U sustavu Northwind to možete učiniti pomoću funkcije StringToDictionary . Potrebno je funkciju poput niza upita i raščlaniti je u njezine komponente. Te se komponente zatim pohranjuju u objekt Scripting.Dictionary . Imajte na umu da za to morate koristiti alate > reference i postaviti referencu na Microsoft Scripting Runtime (scrrun.dll).

Značajke i prednosti objekta Rječnik obuhvaćaju sljedeće:  

  • Redoslijed elemenata nije važan

  • Jednostavne funkcije za dodavanje i uklanjanje elemenata zbirke

  • Funkcije za ponavljanje zbirke da biste znali što se nalazi u zbirci

  • Funkcija Postoji da biste mogli testirati je li dostupan određeni element

Korištenje objekta rječnika prikazuje se u cijelom northwindu. Na primjer, Form_Load ufrmGenericDialog.

Makronaredbe stvorene pomoću čarobnjaka za kontrole u programu Access rijetko obuhvaćaju rukovanje pogreškama; VBA stvoren pomoću čarobnjaka za kontrole može biti ograničen na generički MsgBox Err.Description.

U sustavu Northwind 2.0 pokazujemo vam kako to učiniti bolje kada koristite VBA kod. Implementisli smo ono što se zove globalni rukovatelj pogreškama. Pogreške koje se događaju u bilo kojem postupku pozivaju funkciju na globalnoj razini da bi se prikazala pogreška. Prednost je u tome što je rukovanje pogreškama dosljedno. Ako se poruka mora promijeniti (npr. da bi se dodatno prikazao broj pogreške ili da bi se pogreška evidentirala u datoteku), ona se mora izvršiti samo na jednom mjestu. 

clsErrorHandler modul klase koji implementira kôd za rukovanje pogreškama. Modul klase održava sve svoje glavne i pomoćne funkcije zajedno u jednoj jedinici, čime se ubraja kod.

Makronaredba AutoExec poziva funkciju Pokretanja u modStartup. U izdanju Starter Edition funkcija stvara instancu clsErrorHandler i sprema je kao globalnu varijablu koja je dostupna za korištenje u cijeloj aplikaciji. U izdanju Dev koristi se statična klasa – pogledajte komentare pri vrhu modula klase.

Zapravo, kod za rukovanje pogreškama u postupcima toliko je konzistentan da smo ga sve mogli stvoriti za manje od pet minuta pomoću određenog VBA koda koji je svaki postupak opremao odgovarajućim rukovateljom pogreškama. (Kod nije obuhvaćen predloškom). Izdanja Northwind 2.0 Starter i Developer template isprva su bila opremljena ovim pristupom za rukovanje pogreškama. 
'

POBOLJŠANO RUKOVANJE POGREŠKAMA

Počevši od verzije 2.2 izdanja Northwind Developer Edition, rukovatelj pogreškama poboljšan je zahvaljujući povratnim informacijama zajednice korisnika programa Access. Starter izdanje je nepromijenjeno. 

Rukovatelj pogreškama u starijim verzijama (2.0 – objavljen u travnju 2023.) u biti je:

Public Sub HandleError(…)
    MsgBox Err.Description
End Sub


U verziji 2.2 ona se nadograđuje na:

Public Sub HandleError (…, Optional ByVal IsEventProcedure As Boolean = False)
    If Not IsEventProcedure Then
        Err.Raise lngError, strErrSource
    End If
    MsgBox Err.Description
End Sub


Da bismo razumjeli zašto je ta promjena unesena, najprije ćemo shvatiti što kod izvodi:

  • Makronaredba AutoExec poziva proceduru pokretanja koja izvršava neke inicijalizacije prije otvaranja prvog obrasca.

  • Korisnik stupa u interakciju s aplikacijom, kao što je otvaranje obrasca ili klik na gumb, što uzrokuje pokretanje procedura događaja kao što su Form_Loadi cmdPrintInvoice_Click.
    '

Osim procedura događaja, aplikacije imaju potprograme i funkcije – uglavnom u modulima – i taj se kod poziva iz procedura događaja. Ti se postupci nazivaju "standardnim" postupcima.

U verziji 2.0 northwind, standardni postupci rukuju vlastitim pogreškama s porukama, ali ne bi nekako obavijestili proceduru događaja pozivanja da je došlo do pogreške. To može biti loše ako procedura događaja ima sljedeći kod koji bi se trebao pokrenuti bez obzira na prethodnu pogrešku koju je obradio pozvana procedura. Naravno, potprogram možemo zamijeniti funkcijom koja vraća uspjeh ili neuspjeh i sukladno tome kodira proceduru događaja, ali to nije uvijek mogućnost.

U verziji Northwind 2.2 standardni postupci ne rukuju porukama o pogreškama, već ih pomoću funkcije Err.Raise prijavljujete natrag u proceduru događaja pozivanja. Procedura događaja pozivanja zatim prikazuje podignutu pogrešku i nastavlja se na Exit_Handler. To je bolje jer omogućuje da se postupak pozivanja dovrši graciozno.

Da biste koristili kôd Northwind verzije 2.2, postupci događaja u HandleError moraju proći treći argument koji upućuje na to da je pozivatelj procedura događaja. Northwind Dev Edition ažuriran je tako da to učini.

Još snažniji modul za upravljanje pogreškama ima podršku za postupke "guranja i iskakanja" na "stogu" (polje). Prvi bi element uvijek bio procedura događaja, pa dodatni argument nije potreban. Ova implementacija je izvan ciljeva Northwind Dev Edition.

MRU ili nedavno korišteni popis je nedavno korištenih narudžbi i narudžbenice. Možda ćete se često htjeti vratiti na njih da biste ih stavili u sljedeći status. MrU popisi često se vide u proizvodima sustava Office kao popis nedavno korištenih datoteka koje možda želite ponovno otvoriti.

u izdanju Northwind Dev za implementaciju značajke MRU (koja ne postoji u izdanju Starter) najprije morate utvrditi sljedeće stavke: 

  1. Tablica za pohranu informacija o mrU-u.

  2. Šifra za ažuriranje tablice prilikom otvaranja narudžbenice ili narudžbenice.

  3. Kod za ažuriranje padajućeg izbornika MRU na vrpci.

  4. Kod za učitavanje stavke kada je na vrpci odabrana STAVKA ZA MRU.

Pogledajmo svaki od njih detaljnije. 


1. Tablica za pohranu informacija o MRU-u.

Dizajn tablice MRU je vrijedan pregled, posebno svoje indekse. Imajte na umu da postoji duplicirani indeks SortIdx koji pomaže pri brzom sortiranju stavki MRU-a na padajućem popisu vrpce, kao i jedinstveni indeks koji nameće poslovno pravilo da se za svakog korisnika stavka može pojaviti samo jedanput. Otvaranjem istog redoslijeda, primjerice, dva puta nećete stvoriti dva zapisa u tablici MRU- a.


Tablica koristi prednost činjenice da su sva polja PK (primarni ključ) povezana s MRU-om u bazi podataka samonumeriranje, pa se vrsta podataka Dugi cijeli broj može koristiti za PKValue.

2. Kod za ažuriranje tablice prilikom otvaranja narudžbe ili narudžbe.

U odjeljku NW2 na popis za mrU odlučili smo dodati samo kada je stvoren novi zapis, a ne kada je postojeći ponovno ažuriran. Mi sigurno mogao premjestiti AddToMRU poziv iz Form_AfterInsert na Form_AfterUpdate za podršku.

Postupci AddToMRU i DeleteFromMRU implementirani su u modGlobal, što je standardni modul čiji su javni postupci vidljivi iz bilo kojeg obrasca.

AddToMRU (kao što predlaže naziv) dodaje novu stavku u mrU tablicu, a zatim je po želji obreže, briše najstariji zapis ako je narasla iznad maksimalne veličine (MAX_MRU_COUNT). Zadnji je korak vjerojatno najmanje poznat razvojnim inženjerima programa Access: padajući izbornik vrpce mora se osvježiti i to se postiže pozivanjem InvalidateControl. To je signal vrpce za ponovno pokretanje postupka inicijalizacije. 

3. Kod za ažuriranje padajućeg izbornika MRU na vrpci. 

Kada se pri pokretanju poziva InvalidateControl , izvršava se složeni skup funkcija radi popunjavanja vrpce.  Te postupke poziva XML vrpce u tablici uSysRibbons koji u dijelu piše:

<group id="gCurrentStatus" label="MRU">
    <box id="bxMRU" boxStyle="vertical">
        <dropDown id="ddMRU"
                  getItemCount="ddMRU_GetItemCount"
                  getItemLabel="ddMRU_GetItemLabel"
                  getSelectedItemIndex="ddMRU_GetSelectedItemIndex"
                  getItemID="ddMRU_GetItemID"
                  onAction="ddMRU_OnAction"
                  screentip="Most Recently Used Objects">
        </dropDown>
    </box>
</group>

Te četiri funkcije povratnog poziva popunjavaju padajući izbornik. Imajte na umu da je to vrlo ista ideja kao što je ovdje opisano za standardne kombinirane okvire.

Ako dekommentiste debug.Print lines in modRibbonCallback i ponovno pokrenete aplikaciju, neposredni prozor prikazat će slijed ovako: 

ddMRU_GetItemCount    ddMRU    6 
ddMRU_GetItemLabel    ddMRU    0      Order 60, Proseware, Inc.
ddMRU_GetItemID       ddMRU    0       2 
ddMRU_GetItemLabel    ddMRU    1      Order 62, Best For You Organics Company
ddMRU_GetItemID       ddMRU    1       4 
ddMRU_GetItemLabel    ddMRU    2      Order 63, Wide World Importers
ddMRU_GetItemID       ddMRU    2       5 
ddMRU_GetItemLabel    ddMRU    3      Order 66, Proseware, Inc.
ddMRU_GetItemID       ddMRU    3       8 
ddMRU_GetItemLabel    ddMRU    4      Order 67, Best For You Organics Company
ddMRU_GetItemID       ddMRU    4       9 
ddMRU_GetItemLabel    ddMRU    5      Order 68, Adatum Corporation
ddMRU_GetItemID       ddMRU    5       10 
ddMRU_GetSelectedItemIndex  ddMRU    0


Ovdje možemo vidjeti da Access poziva proceduru koja vraća broj stavki za učitavanje u argumentu ByRef ddMRU_GetItemCount. To je i vrijeme kada upit otvorimo u tablici mrU-a i predmemorirajmo ga jer će se koristiti nekoliko puta. 

Vrpca zatim opetovano poziva dva postupka za dohvaćanje vrijednosti ID-a i natpisa za padajući izbornik s dva stupca. 

Naposljetku, poziva se postupak za onemogućivanje odabira stavke. (U našem slučaju, to je prvi.) 

4. Kod za učitavanje stavke kada je stavka MRU odabrana na vrpci.

Kao i kod bilo koje druge stavke vrpce, svojstvo OnAction u XML-u vrpce određuje funkciju povratnog poziva koja će se koristiti za izvođenje akcije:

onAction="ddMRU_OnAction"

Ovaj je postupak implementiran u modRibbonCallback. Ponovno koristi već otvoreni niz zapisa za pronalaženje zapisa s odabranom stavkom, a zatim, ovisno o obaveznom nazivuTablica, otvara odgovarajući obrazac i prenosi vrijednost PK koja će se učitati.

Potrebna vam je dodatna pomoć?

Želite dodatne mogućnosti?

Istražite pogodnosti pretplate, pregledajte tečajeve za obuku, saznajte kako zaštititi uređaj i još mnogo toga.

Zajednice vam pomažu da postavljate pitanja i odgovarate na njih, pošaljete povratne informacije i čujete se sa stručnjacima s bogatim znanjem.

Jesu li vam ove informacije bile korisne?

Koliko ste zadovoljni jezičnom kvalitetom?
Što je utjecalo na vaše iskustvo?
Ako pritisnete Pošalji, vaše će se povratne informacije iskoristiti za poboljšanje Microsoftovih proizvoda i usluga. Vaš će IT administrator moći prikupiti te podatke. Izjava o zaštiti privatnosti.

Hvala vam na povratnim informacijama!

×