Applies ToAccess za Microsoft 365 Access 2021 Access 2019

Sadržaj ovde može da se odnosi na Northwind 2.0 Developer Edition i Starter Edition. 

VBA (Visual Basic for Applications) je programski jezik koji se koristi u svim Office proizvodima. VBA učenje vam omogućava da radite sa svim Office proizvodima (ne samo sa programom Access).Kada tražite termin "kako da", obavezno potražite primere u programu Access i uključite Microsoft Access u pretragu. Rešenja za druge Office proizvode često će funkcionisati – ali nema garancije. Microsoft Access je proizvod za odrasle; to znači da postoji mnogo primera; љto je sjajno za vas! 

To takođe znači da starije knjige u Access programu i dalje možete da pogledate. Mnoge od starijih knjiga su i dalje dostupne na sajtovima korišćenih knjiga po delić sa njihovim prvobitnim troškovima. Proverite Microsoft veb lokaciju da biste utvrdili koje verzije programa Access i dalje podržavaju i pođite sa njima.

Kraj resursa podrške za Office – primena sistema Office | Microsoft Learn  

Ispod su navedene neke veze ka Access dokumentaciji u korporaciji Microsoft.

Microsoft Access datoteke su Office datoteke. Office datoteke moraju biti na "Pouzdanoj lokaciji" ili moraju imati omogućen "sadržaj". Ove stavke se smatraju "bezbednim" jer ste ih napravili ili potiče iz pouzdanog izvora. Proverite da li postoje pouzdane lokacije svaki put kada otvorite bilo koju Office datoteku. Odavde ćemo ovo naжi kao pouzdano/omogućeno. NAPOMENA: Ako se nova verzija aplikacije objavi i otvori sa nepoverene lokacije, proces omogućavanja sadržaja će se ponoviti.

Saznajte više o pouzdanim lokacijama.: 

Makroi, funkcije i podobrasci su način na koji primenjujete poslovnu logiku u Access bazi podataka. Važno je da razumete opseg i vidljivost pre početka.

Događaji (kao što je klik na kontrolu) u kontrolama u obrascu (npr. dugmad, okviri za tekst, oznake itd.) aktiviraju druge procese, kao što su dodavanje, brisanje zapisa ili otvaranje obrazaca. Ovi procesi mogu da se primene pomoću makroa ili VBA. Northwind Starter Edition koristi uglavnom makroe, kao i neke VBA datoteke u kojima makroi ne mogu da izvršavaju potrebne funkcije. Northwind Developer Edition koristi prvenstveno VBA. 

Neki tipovi kontrola imaju ugrađene čarobnjake za automatsko kreiranje makroa. Na primer, dodavanje komandnog dugmeta u obrazac otvara čarobnjak koji nudi nekoliko izbora funkcionalnosti za dugme. Dodavanje kombinovanog okvira otvara čarobnjak koji može da se konfiguriše za pronalaženje određenog zapisa u obrascu. 

Okno za navigaciju je glavni način na koji prikazujete sve objekte baze podataka i podrazumevano se prikazuje sa leve strane Access prozora. Northwind okno za navigaciju je prilagođeno. Napravili smo prilagođenu kategoriju pod imenom Northwind Starter 2.0. To nam omogućava da organizujemo objekte po funkcionalnoj oblasti.

Ponekad je potrebno da promenljiva postoji nakon što objekat koji ga je kreirao iskoči iz opsega. Pogledajte gorenavedeni opseg i vidljivost . Postoje tri primarna načina da to uradite: javne promenljive, Privremene promenljive i Skladištenje vrednosti u lokalnoj tabeli. Mnogi projektanti koriste kombinaciju ovih. Svako ima svoje prednosti i protiv.  Više informacija o svakoj od njih ovde: 

Javna promenljiva VBA modula: 

Privremene promenljive: 

Skladištenje vrednosti u lokalnoj tabeli

  • Javne promenljive i privremene promenljive postoje za trenutnu sesiju i izlaze iz opsega kada se aplikacija zatvori. Ali šta ako želite da zadržite određene korisničke promenljive u sesijama? Ove tipove vrednosti možete da uskladištite u lokalnoj tabeli. U programu Northwind 2.0 jedna takva promenljiva čuva se u tabeli koja se zove SystemSettings. Vrednost u tabeli je ShowWelcome. Ova vrednost govori programu Access da li želite da vidite ekran dobrodošlice svaki put kada se prijavite ili ne.

Projektanti često treba da prenesu parametre iz jednog obrasca u drugi ili iz obrasca u izveštaj. Ovi parametri prenesu važne informacije, koje će pozvana funkcija zatim koristiti za konfigurisanje. Postoji nekoliko načina na koje drugi obrazac ili izveštaj mogu da prenesu informacije iz prvog obrasca. Evo nekoliko ovih načina: 

  1. Drugi obrazac može da se "vrati" na prvi obrazac kako bi preuzeo neke vrednosti, verovatno u vidljivoj ili nevidljivoj kontroli.  Na primer: lngCustomerID = Forms!FirstForm!cboCustomerID 

  2. Prvi obrazac može da sačuva vrednosti u globalnim promenljivama ili u tempVars. Na primer:g_lngUserID = Me.cboUserID  TempVars.Add "UserID", Me.cboUserID 

Metod koji se često koristi u northwind Developer Edition, kao i u našim profesionalnim životima, koristi argument OpenArgs za DoCmd.OpenForm ili OpenReport. Na primer:DoCmd.OpenForm "frmCompanyDetail", OpenArgs:=StringFormat("CompanyID={0} &CompanyTypeID={1}", Me.VendorID, ctVendor)

Ovde kombinćemo dve tehnike: (1) korišćenje funkcije OpenArgs za prolazak kroz ID dobavljača i tip dobavljača i (2) korišćenje funkcije StringFormat() za kreiranje, na primer ovu nisku: 

CompanyID=5&CompanyTypeID=2 

Ova niska veoma liči na nisku upita kao što se koristi u pregledaču. Sadrži jedan ili više "parova imena/vrednosti" razdvojenih znakom ampersand: 

name1=value1&name2=value2

Prednost takve niske je u tome što svaka vrednost ima ime. Uporedite ovo sa jednostavnijim pristupom gde biste podesili OpenArgs samo na "5,2".  U tom slučaju, bilo bi potrebno truda da se sazna šta svaka vrednost označava. Imenovanje svake vrednosti čini nisku upita "samoopisivanju", što je dobra praksa programiranje.

Na kraju prijema DoCmd.OpenForm obično smo u događaju Form_Open ili Form_Load i želimo da raščlanjujemo nisku OpenArgs u njegove komponente.

U programu Northwind to možete da uradite pomoću funkcije StringToDictionary . Ona uzima funkciju poput niske upita i raščlanjuje je u komponente. Te komponente se zatim skladište u objektu Scripting.Dictionary . Imajte na umu da to zahteva da koristite alatke > reference i postavite referencu na Microsoft Scripting Runtime (scrrun.dll).

Funkcije i pogodnosti objekta Rečnik uključuju sledeće:  

  • Redosled elemenata nije važan

  • Jednostavne funkcije za dodavanje i uklanjanje elemenata kolekcije

  • Funkcije koje se ponavljaju nad kolekcijom, tako da možete da znate šta se nalazi u kolekciji

  • Funkcija "Exists " tako da možete da testirate da li je određeni element dostupan

Upotreba objekta rečnika pojavljuje se u celoj verziji northwind. Na primer, događaj Form_LoadfrmGenericDialog.

Makroi kreirani pomoću čarobnjaka za kontrolu u programu Access retko uključuju rukovanje greškama; VBA kreiran pomoću čarobnjaka za kontrolu može biti ograničena na generički MsgBox Err.Description.

U programu Northwind 2.0 vam pokazujemo kako da to uradite bolje kada koristite VBA kôd. Primenili smo ono što se zove globalni rukovalac greškama. Greške koje se dešavaju u bilo kojoj proceduri pozivaju funkciju na globalnom nivou da bi prikazale grešku. Velika prednost je u tome što je rukovanje greškama dosledno. A ako poruka treba da se promeni (npr. da bi se dodatno prikazao broj greške ili da bi se greška evidentirala u datoteci), ona mora da se uradi samo na jednom mestu. 

clsErrorHandler je modul klase koji primenjuje kôd za rukovanje greškama. Modul klase objedinjuje sve svoje glavne i pomoćne funkcije u jednoj jedinici i na taj način enkapsura kôd.

Makro AutoExec poziva funkciju pokretanja u modStartup. U izdanju Starter Edition funkcija kreira instancu klasErrorHandler i čuva je kao globalnu promenljivu koja je dostupna za upotrebu u celoj aplikaciji. U dev izdanju koristi se statička klasa – pogledajte komentare na vrhu modula klase.

Zapravo, kôd za rukovanje greškama u procedurama je toliko dosledan da smo sve mogli da kreiramo za manje od pet minuta koristeći određeni VBA kôd koji je svaku proceduru smucao sa odgovarajućim rukovaoca greškama. (Kôd nije uključen u predložak). I Northwind 2.0 Starter i Developer predlošci prvobitno su napravljeni ovim pristupom za rukovanje greškama.  '

POBOLJŠANO RUKOVANJE GREŠKAMA

Počevši od verzije 2.2 northwind Developer Edition, rukovalac greškama je poboljšan, zahvaljujući povratnim informacijama iz Access zajednice. Starter izdanje je nepromenjeno. 

Rukovalac greškama u prethodnoj verziji (2.0 – objavljen u aprilu 2023.) je:

Public Sub HandleError(…)     MsgBox Err.DescriptionEnd Sub

U verziji 2.2 nadograđena je na:

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

Da bismo razumeli zašto je ta promena izvršena, prvo da razumemo šta pokreće kôd:

  • Makro AutoExec poziva proceduru pokretanja koja izvršava neka pokretanja pre otvaranja prvog obrasca.

  • Korisnik vrši interakciju sa aplikacijom, kao što je otvaranje obrasca ili klik na dugme, izazivajući procedure događaja kao što su Form_Load i cmdPrintInvoice_Click. '

Pored procedura događaja, aplikacije imaju podbroute i funkcije – uglavnom u modulima – i taj kôd se poziva iz procedura događaja. To se nazivaju "standardne" procedure.

U verziji 2.0 preduzeća Northwind, standardne procedure bi rukovale sopstvenim greškama sa porukama, ali ne bi nekako obavestile proceduru događaja pozivanja da je došlo do greške. To može biti loše ako procedura događaja ima sledeći kôd koji bi trebalo da se pokrene bez obzira na prethodnu grešku koju je obradio pozvana procedura. Naravno, možemo da zamenimo podizveštaj funkcijom koja daje uspeh ili neuspeh i da sprovedemo proceduru događaja u skladu sa tim, ali to nije uvek opcija.

U northwind verziji 2.2 standardne procedure ne rukuju porukama o greškama, već, umesto da koriste err.Raise, prijavite ih na proceduru događaja pozivanja. Procedura događaja pozivanja zatim prikazuje podignutu grešku i biografije na Exit_Handler. To je bolje, jer omogućava da se procedura pozivanja dostojanstveno završi.

Da biste koristili kôd verzije 2.2 za Northwind, procedure događaja moraju da pređu u HandleError treći argument koji ukazuje na to da je pozivalac procedura događaja. Northwind Dev Edition je ažuriran da to uradi.

Još moćniji modul rukovaoca greškama imaće podršku za procedure "guranja i iskakanja" na "steku" (niz). Prvi element bi uvek bio procedura događaja, tako da dodatni argument nije potreban. Ova primena je izvan ciljeva izdanja Northwind Dev.

MRU ili Nedavno korišćeno je lista nedavno korišćenih porudžbina i narudžbenice. Možda ćete želeti da se često vraćate na njih da biste ih postavili na sledeći status. MRU liste se često vide u Office proizvodima kao lista nedavno korišćenih datoteka koje ćete možda želeti ponovo da otvorite.

u izdanju Northwind Dev, da biste primenili MRU funkciju (koja ne postoji u izdanju Starter), prvo morate da uspostavite sledeće stavke: 

  1. Tabela za skladištenje MRU informacija.

  2. Kôd za ažuriranje tabele kada se otvori porudžbina ili izlazna porudžbina (PO).

  3. Kôd za ažuriranje mrU padajuće liste na traci.

  4. Kôd za učitavanje stavke kada je mrU stavka izabrana sa trake.

Hajde da detaljnije pogledamo svaku od ovih stavki. 

1. Tabela za skladištenje MRU informacija.

Dizajn MRU tabele vredi pregledati, posebno indekse. Imajte na umu da postoji duplirani indeks SortIdx koji pomaže pri brzom sortiranju MRU stavki na padajućoj listi trake, kao i jedinstvenog indeksa za nametanje poslovnog pravila da se za svakog korisnika stavka može pojaviti samo jednom. Na primer, ako dvaput otvorite istu porudžbinu, ne kreira se dva zapisa u MRU tabeli.

Tabela koristi činjenicu da su sva polja povezana sa PK -om (primarni ključ) u bazi podataka automatsko numerisanje, tako da tip podataka Dugački ceo broj može da se koristi za PKValue.

2. Kôd za ažuriranje tabele kada se otvori porudžbina ili P.O.

U NW2 smo odabrali da dodamo u MRU listu samo kada je kreiran novi zapis, a ne kada je postojeći ponovo ažuriran. Svakako možemo da premestimo AddToMRU poziv sa Form_AfterInsert na Form_AfterUpdate bismo to podržali.

AddToMRU i DeleteFromMRU procedure se primenjuju u modGlobal, što je standardni modul čije su javne procedure vidljive iz bilo kog obrasca.

AddToMRU (kao što ime predlaže) dodaje novu stavku u MRU tabelu, a zatim je opcionalno skraćuje nazad i briše najstariji zapis, ako je prevazišao maksimalnu veličinu (MAX_MRU_COUNT). Poslednji korak je verovatno najmanje poznat projektantima programa Access: Padajuća lista na traci mora da se osveži, a to se postiže pozivanjem funkcije InvalidateControl. Ovo je signal traci da ponovo pokrene proces pokretanja. 

3. Kôd za ažuriranje MRU padajuće liste na traci. 

U vreme pokretanja i nakon pozivanja svojstva InvalidateControl , izvršava se složeni skup funkcija za popunjavanje trake.  Ove procedure poziva XML trake u tabeli uSysRibbons koja kaže delom:

<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>

Ove četiri funkcije povratnog poziva popunjavaju padajuću listu. Imajte na umu da je ovo veoma ista ideja kao što je opisano ovde za standardne kombinovane okvire.

Ako dekomprimujete redove Debug.Print u modRibbonCallback i ponovo pokrenete aplikaciju, trenutni prozor će predstaviti ovakvu sekvencu: 

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

Ovde možemo da vidimo da Access prvo poziva proceduru koja vraća broj stavki za učitavanje u argumentu ByRef ddMRU_GetItemCount. Ovo je i vreme kada otvorimo upit u MRU tabeli i keširajmo ga jer će se koristiti nekoliko puta. 

Traka zatim više puta poziva dve procedure da bi se dobili vrednosti ID-a i oznake za padajuću listu sa dve kolone. 

Na kraju, on poziva proceduru za preusmeđivanje stavke koju treba izabrati. (U našem slučaju, to je prva.) 

4. Kôd za učitavanje stavke kada je mrU stavka izabrana sa trake.

Kao i bilo koja druga stavka trake, svojstvo OnAction u XML-u trake navodi funkciju povratnog poziva koja će se koristiti za izvršavanje radnje:

onAction="ddMRU_OnAction"

Ova procedura se primenjuje u modRibbonCallback. Ona ponovo koristi već otvoreni skup zapisa da bi pronašli zapis sa izabranom stavkom, a zatim, u zavisnosti od zahtevanog tableName, otvara odgovarajući obrazac, prolazeći u PK vrednosti koja će se učitati.

Da li vam je potrebna dodatna pomoć?

Želite još opcija?

Istražite pogodnosti pretplate, pregledajte kurseve za obuku, saznajte kako da obezbedite uređaj i još mnogo toga.

Zajednice vam pomažu da postavljate pitanja i odgovarate na pitanja, dajete povratne informacije i čujete mišljenje od stručnjaka sa bogatim znanjem.