Ši pamoka paaiškins skirtumą tarp viešų ir privačių deklaracijų VBA ir kaip nurodyti modulius kaip privačius.
Viešos ir privačios papildomos procedūros
Procedūros (poskyriai ir funkcijos) gali būti paskelbtos privačiomis arba viešomis VBA. Jei jie yra vieši, tai reiškia, kad juos galėsite matyti „Excel“ makrokomandos lange ir juos galima iškviesti iš bet kurios jūsų VBA projekto vietos. Jei jie yra privatūs, jų negalima matyti „Excel“ makrokomandų lange ir galima naudoti tik tame modulyje, kuriame jie deklaruojami (naudojant įprastus metodus, šio straipsnio apačioje rasite būdų, kaip pasiekti privačias procedūras iš kitų modulių) .
Viešosios funkcijos gali būti vadinamos integruotomis „Excel“ funkcijomis „Excel“ darbalapyje.
Pastaba: Kintamieji ir konstantos taip pat gali būti vieši arba privatūs.
„Excel“ makro langas
Pagal numatytuosius nustatymus „Excel“ makrokomandos (dauguma VBA procedūrų) yra matomos darbaknygės vartotojams makrokomandų lange:
Šie laikomi Viešas procedūras. Galite aiškiai apibrėžti procedūras kaip viešas, prieš antrinį teiginį pridėdami „Vieša“:
123 | Viešas subas „HelloWorld“ ()„MsgBox“ „Sveiki pasaulis“Pabaiga Sub |
Jei nenustatysite procedūros kaip viešos, ji bus laikoma vieša.
Jei norite paskelbti procedūrą privačia, tiesiog pridėkite „Privati“ prieš procedūros antrinį teiginį:
123 | Privatus subas „HelloEveryone“ ()„MsgBox“ „Sveiki visi“Pabaiga Sub |
Antroji procedūra nebūtų matoma „Macro“ lange „Excel“ vartotojams, tačiau vis tiek gali būti naudojama jūsų VBA kode.
Procedūros su argumentais
Papildomos procedūros gali turėti argumentų. Argumentai yra įvestis į papildomą procedūrą:
123 | Sub Hello (strName kaip eilutė)„MsgBox“ „Sveiki“ ir „strName“Pabaiga Sub |
Jei antrinė procedūra turi argumentų, ji niekada nebus rodoma makrokomandų lange, nepaisant to, ar ji paskelbta vieša, nes nėra galimybės deklaruoti argumentų.
Funkcijos taip pat niekada nebus rodomos makrokomandų lange, nepaisant to, ar jos paskelbtos viešomis.
Viešąsias „Excel“ funkcijas galima naudoti tiesiogiai darbalapyje kaip „vartotojo apibrėžtą funkciją“ (UDF). Tai iš esmės yra pasirinktinė formulė, kurią galima iškviesti tiesiogiai darbalapyje. Juos galima rasti „Įterpti funkciją“ lango kategorijoje „Vartotojo apibrėžta“ arba įvesti tiesiai į langelį.
VBA programavimas | Kodo generatorius jums tinka!
Procedūrų naudojimas tarp modulių jūsų VBA projekte
Viešas procedūras galima iškviesti iš bet kurio jūsų VBA projekto modulio ar formos.
Bandant iškviesti privačią procedūrą iš kito modulio, atsiras klaida (pastaba: apie tai žr. Šio straipsnio apačioje).
Pastaba: Klasės modulių viešosios procedūros ir kintamieji veikia šiek tiek kitaip ir nepatenka į šio straipsnio taikymo sritį.
Skirtingi moduliai gali saugoti procedūras tuo pačiu pavadinimu, jei jos abi yra privačios.
Jei dvi ar daugiau procedūrų turi tą patį pavadinimą ir yra paskelbtos viešomis, vykdydami kodą gausite kompiliavimo klaidą „Aptiktas dviprasmiškas vardas“.
Privatūs moduliai
Pagal numatytuosius nustatymus moduliai yra vieši.
Jei norite, kad modulis būtų privatus, įdėkite šį raktinį žodį modulio viršuje.
1 | Pasirinkimo privatus modulis |
Jei paskelbsite modulį kaip privatų, „Excel“ vartotojai nematys jokių modulio procedūrų. Funkcijų procedūros nebus rodomos lange Įterpti funkciją, bet vis tiek gali būti naudojamos „Excel“ lape, jei vartotojas žino funkcijos pavadinimą!
Papildomos procedūros nebus rodomos makrokomandų lange, tačiau jas vis tiek bus galima naudoti VBA projekte.
Prieiga prie privačios procedūros iš kito modulio
Kaip minėta aukščiau, privačios procedūros nepasiekiamos kituose kodo moduliuose „įprastais“ metodais. Tačiau privačias procedūras galite pasiekti naudodami Taikymas. Vykdyti komanda prieinama VBA.
Apsvarstykite šiuos 3 modulius.
2 modulis yra a Privatus Modulis su a Viešas Papro procedūra, o 3 modulis yra Viešas modulis su a Privatus Sub procedūra.
1 modulyje galime vadinti „Hello World“ - Pasirinkimo privatus modulis viršuje netrukdo mums iškviesti papildomos procedūros - viskas, ko reikia, yra paslėpti papildomą procedūrą makrokomandų lange.
Mums taip pat nereikia skambučio pareiškimo - jis skirtas palengvinti kodo skaitymą.
Kodas taip pat gali atrodyti taip:
1234 | Sub CallHelloFromPrivate ()"paskambinkite antriniam asmeniniam moduliuiLabas pasauliPabaiga Sub |
Mes taip pat galime paleisti „HelloWorld“ papildomą procedūrą naudodami VBA Taikymas. Vykdyti komandą.
Tačiau 3 modulyje „GoodMorningWorld“ procedūra paskelbta privačia. Negalite skambinti iš kito modulio naudodami „įprastą“ priemonę, ty skambučio pareiškimą.
Jūs turite naudoti Taikymas. „RunCommand“ paleisti „Private Sub“ iš kito modulio.
1234 | Sub CallGoodMorning ()“paleiskite privatų antrinį elementą iš viešojo modulioApplication.Run („GoodMorningWorld“)Pabaiga Sub |
Atkreipkite dėmesį, kai naudojate Taikymas. „RunCommand“ komandą, subprocedūros pavadinimą turite įdėti į apverstus kablelius.
Jei bandysime naudoti skambučio pareiškimą „GoodMorningWorld“ papildomai procedūrai vykdyti, įvyks klaida.