Applies ToMicrosoft 365 rakendus Access Access 2021 Access 2019

Siinne sisu võib kehtida Northwind 2.0 Developer Editioni ja Starter Editioni kohta. 

VBA (Visual Basic for Applications) on kõigis Office'i toodetes kasutatav programmeerimiskeel. VBA õppimine võimaldab teil töötada kõigi Office'i toodetega (mitte ainult Accessiga).Kui otsite märksõna "õpetused", otsige kindlasti Accessi konkreetseid näiteid ja lisage otsingusse Microsoft Access. Sageli töötavad teiste Office'i toodete lahendused, kuid garantii puudub. Microsoft Access on küps toode; see tähendab, et seal on palju näiteid; mis on teie jaoks suurepärane! 

See tähendab ka seda, et Accessi programmeerimise vanemaid raamatuid saab endiselt vaadata. Paljud vanemad raamatud on endiselt kasutatud raamatute saitidel saadaval murdosa nende algsest kulust. Kontrollige Microsofti veebisaiti, et teha kindlaks, milliseid Accessi versioone endiselt toetatakse, ja jätkake nendega.

Office'i tootetoe lõpp – Office'i juurutamine | Microsoft Learn  

Allpool on mõned Lingid Accessi dokumentatsioonile Microsoftis.

Microsoft Accessi failid on Office'i failid. Office'i failid peavad olema usaldusväärses kohas või nende sisu peab olema lubatud. Neid üksusi peetakse turvaliseks, kuna olete need loonud või pärinevad usaldusväärsest allikast. Otsige usaldusväärseid asukohti iga kord, kui avate mis tahes Office'i faili. Siin nimetame seda usaldusväärseks/lubatuks. MÄRKUS. Kui rakenduse uus versioon antakse välja ja avatakse mitteusaldusväärsest asukohast, siis sisu lubamise protsess kordub.

Lisateave usaldusväärsete asukohtade kohta. 

Makrode, funktsioonide ja alamfunktsioonide abil saate oma Accessi andmebaasi juurutada äriloogika. Oluline on, et mõistaksite ulatust ja nähtavust enne alustamist.

Sündmused (nt juhtelemendi klõpsamine) vormi juhtelementides (nt nupud, tekstiväljad, sildid jne) käivitavad muid protsesse, nagu kirjete lisamine, kustutamine või vormide avamine. Neid protsesse saab rakendada makrode või VBA abil. Northwind Starter Edition kasutab enamasti makrosid ja mõnda VBA-t, kus makrod ei saa vajalikke funktsioone täita. Northwind Developer Edition kasutab peamiselt VBA-t. 

Mõnel juhtelemenditüübil on makro automaatseks loomiseks sisseehitatud viisardid. Näiteks vormile käsunupu lisamisel avatakse viisard, mis pakub nupule mitmesuguseid funktsioone. Liitboksi lisamisel avatakse viisard, mida saab konfigureerida vormil kindla kirje leidmiseks. 

Navigeerimispaan on peamine andmebaasiobjektide vaatamise ja juurdepääsu viis ning vaikimisi kuvatakse see Accessi akna vasakus servas. Põhjatuule navigeerimispaan on kohandatud. Lõime kohandatud kategooria Northwind Starter 2.0. See võimaldab meil korraldada objekte funktsionaalse ala järgi.

Mõnikord on vaja, et muutuja eksisteeriks ka pärast objekti loomist, mille see lõi. Vt eespool jaotist Ulatus ja nähtavus . Selleks on kolm peamist võimalust: avalikud muutujad, ajutised muutujad ja väärtuste talletamine kohalikus tabelis. Paljud arendajad kasutavad neid koos. Igal on plussid ja miinused.  Lisateavet iga üksuse kohta leiate siit: 

VBA mooduli avalik muutuja: 

Ajutised varid: 

Väärtuste talletamine kohalikus tabelis

  • Praeguse seansi jaoks on olemas avalikud muutujad ja ajutised muutujad ning rakenduse sulgemisel see ulatus kaob. Mida aga teha, kui soovite kasutajakohased muutujad kogu seansi vältel alles hoida? Seda tüüpi väärtusi saate talletada kohalikus tabelis. Versioonis Northwind 2.0 salvestatakse üks selline muutuja tabelisse nimega SystemSettings. Tabeli väärtus on ShowWelcome. See väärtus annab Accessile teada, kas soovite tervituskuva kuvada iga kord, kui sisse logite või mitte.

Arendajad peavad parameetreid sageli edastama ühelt vormilt teisele või vormilt aruandele. Need parameetrid annavad olulist teavet, mida kutsutud funktsioon kasutab enda konfigureerimiseks. Teisel vormil või aruandel on esimesest vormist teabe toomiseks mitu võimalust. Selleks on mitu võimalust. 

  1. Teine vorm võib mõne väärtuse (nähtaval või nähtamatul juhtelemendil) toomiseks esimesele vormile tagasi vaadata.  Näide: lngCustomerID = Forms!FirstForm!cboCustomerID 

  2. Esimesel vormil saab väärtused salvestada globaalsetesse muutujatesse või tempVars-muutujatesse. Näide: g_lngUserID = Me.cboUserID  TempVars.Add "UserID", Me.cboUserID 

Meetod, mida kasutatakse sageli nii Northwind Developer Editionis kui ka meie tööelus, kasutab funktsiooni DoCmd.OpenForm või OpenReport argumenti OpenArgs. Näide: DoCmd.OpenForm "frmCompanyDetail", OpenArgs:=StringFormat("CompanyID={0} &CompanyTypeID={1}", Me.VendorID, ctVendor)

Ühendame siin kahte viisi: (1) OpenArgs-funktsioonide läbimiseks vendorID ja VendorType'i ning (2) funktsiooni StringFormat() kasutamist näiteks järgmise stringi loomiseks: 

CompanyID=5&CompanyTypeID=2 

See string näeb välja nagu päringustring, mida kasutatakse brauseris. See sisaldab ühte või mitut ampersandi märgiga eraldatud nime-/väärtusepaari: 

name1=value1&name2=value2

Sellise stringi eeliseks on see, et igal väärtusel on nimi. Võrrelge seda lihtsama lähenemisviisiga, mille puhul määraksite OpenArgs-i väärtuseks ainult "5,2".  Sellisel juhul oleks vaja teada saada, mida iga väärtus tähistab. Iga väärtuse nimetamine muudab päringustringi "ise kirjeldatavaks", mis on hea programmeerimistava.

DoCmd.OpenFormi vastuvõtmise lõpus oleme tavaliselt sündmuse Form_Open võiF-orm_Load ja soovime Sõeluda OpenArgs-stringi selle komponentideks.

Northwindis saate seda teha funktsiooniga StringToDictionary . See võtab päringustringilaadse funktsiooni ja sõelub selle komponentideks. Need komponendid talletatakse seejärel objektis Scripting.Dictionary . Pange tähele, et selleks peate kasutama tööriistad > References (Viited ) ja määrama viite Microsoft Scripting Runtime'ile (scrrun.dll).

Sõnastikuobjekti funktsioonid ja eelised on järgmised.  

  • Elementide järjekord pole oluline

  • Lihtsad funktsioonid kogumi elementide lisamiseks ja eemaldamiseks

  • Funktsioonid, mida kogumikus tsüklina kasutada, et saaksite teada, mis selles on

  • Funktsioon Exists , et saaksite testida, kas teatud element on saadaval

Sõnastikuobjekti kasutamine kuvatakse kogu Põhjatuules. Näiteks sündmus Form_LoadfrmGenericDialog.

Accessis juhtelemendiviisarditega loodud makrod sisaldavad harva tõrketöötlust; Juhtelemendiviisarditega loodud VBA võib olla piiratud üldise üksusega MsgBox Err.Description.

Northwind 2.0-s näitame teile, kuidas seda VBA koodi kasutamisel paremini teha. Oleme juurutanud globaalse tõrkeohjuri. Tõrgete korral, mis ilmnevad mis tahes toimingus, kutsuvad tõrke kuvamiseks funktsiooni globaalsel tasemel. Siin on suur eelis see, et tõrketöötlus on ühtne. Kui sõnum vajab muutmist (nt tõrke numbri kuvamiseks või tõrke faili logimiseks), tuleb seda teha ainult ühes kohas. 

clsErrorHandler on klassimoodul, mis juurutab tõrketöötluse koodi. Klassimoodul hoiab kõik põhi- ja abifunktsioonid ühes üksuses koos, kapseldades seega koodi.

Makro AutoExec kutsub käivitusfunktsiooni modStartup. Starter Editionis loob funktsioon clsErrorHandleri eksemplari ja salvestab selle globaalse muutujana, mis on saadaval kasutamiseks kogu rakenduses. Väljaandes Dev kasutatakse staatilist klassi – vaadake klassimooduli ülaosas olevaid kommentaare.

Tegelikult on protseduuride tõrketöötluskood nii järjekindel, et saime selle luua vähem kui viie minuti jooksul, kasutades konkreetset VBA koodi, mis sobis iga protseduuri õige veaohjuriga. (Koodi ei kaasata malli). Nii Northwind 2.0 starteri kui ka arendaja malli väljaannetele oli algselt see tõrketöötlusmeetod välja antud.  '

TÄIUSTATUD TÕRKETÖÖTLUS

Alates Northwind Developer Editioni versioonist 2.2 on tõrkeohjurit tänu Accessi kogukonna tagasisidele täiustatud. Väljaannet Starter ei muudeta. 

Sisuliselt on varasema versiooni tõrkeohjur (2.0 - välja antud aprillis 2023) on:

Public Sub HandleError(…)     MsgBox Err.DescriptionEnd Sub

Versioonis 2.2 täiendatakse see järgmisele versioonile:

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

Selleks et mõista, miks see muudatus tehti, selgitame esmalt, mis koodi käivitab.

  • Makro AutoExec kutsub käivitusprotseduuri, mis teeb mõned lähtestamised enne esimese vormi avamist.

  • Kasutaja suhtleb rakendusega (nt avab vormi või klõpsab nuppu), põhjustades sündmuseprotseduuride käivitamise (nt Form_Load ja cmdPrintInvoice_Click). '

Lisaks sündmuseprotseduuridele on rakendustel alammarsruute ja funktsioone-enamasti moodulites ja see kood kutsutakse sündmuseprotseduuridest. Neid nimetatakse standardprotseduurideks.

Northwindi versioonis 2.0 käsitleksid tavatoimingud sõnumitega oma vigu, kuid nad ei teavitanud kuidagi helistamise sündmuse protseduuri tõrke ilmnemisest. See võib olla halb, kui sündmuseprotseduuril on järgmine kood, mis peaks käivituma olenemata kutsutud protseduuri eelmisest tõrkest. Kindlasti võiks alammarsruuti asendada funktsiooniga, mis tagastab õnnestumise või nurjumise, ja vastavalt sellele sündmuse protseduuri koodda, kuid see ei ole alati võimalik.

Northwindi versioonis 2.2 ei käsitle tavatoimingud tõrketeateid, vaid pigem teavitage neid funktsiooni Err.Raise abil kutsuva sündmuse protseduurist. Kutsuv sündmuseprotseduur kuvab tõstetud tõrke ja jätkab tööd Exit_Handler. See on parem, sest see võimaldab helistamise protseduuril sujuvalt lõppeda.

Northwindi versiooni 2.2 koodi kasutamiseks peavad sündmuseprotseduurid läbima handleErrori kolmanda argumendi, mis näitab, et kutsuja on sündmuseprotseduur. Northwind Dev Edition on selleks värskendatud.

Veelgi võimsam veaohjuri moodul toetaks "virna" (massiivi) "tõukamis- ja hüpikprotseduure". Esimene element oleks alati sündmuseprotseduur, seega pole lisaargument vajalik. See rakendamine ei piirdu Northwind Dev Editioni eesmärkidega.

MRU ehk Viimati kasutatud on viimati kasutatud tellimuste ja ostutellimuste loend. Võimalik, et soovite nende sagedasti uuesti kasutusele võtta, et lisada need järgmisesse olekusse. MRU loendeid kuvatakse Sageli Office'i toodetes loendina viimati kasutatud failidest, mida soovite võib-olla uuesti avada.

Väljaandes Northwind Dev peate MRU funktsiooni rakendamiseks (mida starteri väljaandes pole) esmalt looma järgmised üksused: 

  1. Tabel MRU teabe talletamiseks.

  2. Kood tabeli värskendamiseks tellimuse või ostutellimuse avamisel.

  3. MrU ripploendi värskendamise kood lindil.

  4. Kood üksuse laadimiseks, kui lindilt on valitud MRU-üksus.

Vaatame neid lähemalt. 

1. Tabel MRU teabe talletamiseks.

MrU tabeli kujundust tasub läbi vaadata, eriti selle indeksid. Pange tähele, et registri sortIdx on duplikaat, mis aitab lindi ripploendis mrU üksusi kiiresti sortida, samuti kordumatu indeks, mis jõustab ärireegli, et iga kasutaja jaoks saab üksus toimuda ainult üks kord. Näiteks sama tellimuse kaks korda avamisel ei looda MRU tabelis kahte kirjet.

Tabel kasutab ära asjaolu, et andmebaasi kõik MRU-ga seotud PK-väljad (primaarvõti) on automaatnumber, seega saab PKValue jaoks kasutada andmetüüpi Pikk täisarv.

2. Kood tabeli värskendamiseks, kui tellimus või P.O. avatakse.

NW2-s valisime MRU loendisse lisamise ainult uue kirje loomisel, mitte olemasoleva kirje uuesti värskendamisel. Kindlasti võiksime selle toetamiseks viia AddToMRU kõne Form_AfterInsert-lt Form_AfterUpdate.

Protseduurid AddToMRU ja DeleteFromMRU rakendatakse meetodis modGlobal, mis on standardmoodul, mille avalikud protseduurid on nähtavad mis tahes vormis.

AddToMRU (nagu nimigi ütleb) lisab uue üksuse MRU tabelisse ja soovi korral kärbab selle tagasi, kustutades vanima kirje, kui see on kasvanud üle maksimumsuuruse (MAX_MRU_COUNT). Viimane toiming on tõenäoliselt Accessi arendajatele kõige vähem tuntud: lindi rippmenüü tuleb värskendada ja selleks tuleb kutsuda InvalidateControl. See on lindil lähtestusprotsessi uuesti käivitamise signaal. 

3. MrU ripploendi värskendamise kood lindil. 

Käivitamise ajal ja pärast InvalidateControli kutsumist käivitatakse lindi asustamiseks keerukas funktsioonide kogum.  Lindi XML kutsub neid toiminguid tabelis uSysRibbons , mis osaliselt ütleb:

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

Rippmenüü asustab need neli tagasihelistamisfunktsiooni. Pange tähele, et see on väga sama idee, mida on siin kirjeldatud standardsete liitbokside puhul.

Kui eemaldate modRibbonCallbackisjooned Debug.Print ja taaskäivitate rakenduse, kuvatakse vahetu akna järjestus järgmiselt: 

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

Siin on näha, et Access helistab esmalt protseduurile, mis tagastab ddMRU_GetItemCount argumendis ByRef laaditavate üksuste arvu. See on ka aeg, mil avame päringu MRU tabelis ja salvestame selle vahemällu, kuna seda kasutatakse mitu korda. 

Seejärel kutsub lint kahte toimingut, et saada kahe veeruga ripploendite ID ja Silt väärtused. 

Lõpuks kutsutakse seda toimingut ümberlülitamiseks, milline üksus tuleks valida. (Meie puhul on see esimene.) 

4. Kood üksuse laadimiseks, kui MRU üksus on lindilt valitud.

Sarnaselt muude lindiüksustega määrab lindi XML-i atribuut OnAction toimingu sooritamiseks kasutatava tagasihelistamisfunktsiooni.

onAction="ddMRU_OnAction"

Seda protseduuri rakendatakse rakenduses modRibbonCallback. See kasutab valitud üksusega kirje otsimiseks uuesti juba avatud kirjekomplekti, seejärel avab olenevalt nõutavast tabelinimest vastav vorm, edastades laaditava PK-väärtuse.

Kas vajate veel abi?

Kas soovite rohkem valikuvariante?

Siin saate tutvuda tellimusega kaasnevate eelistega, sirvida koolituskursusi, õppida seadet kaitsma ja teha veel palju muud.

Kogukonnad aitavad teil küsimusi esitada ja neile vastuseid saada, anda tagasisidet ja saada nõu rikkalike teadmistega asjatundjatelt.