VBA privačios ir viešos procedūros (abonementai ir funkcijos)

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

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave