VBA privātās un publiskās procedūras (apakšsadaļas un funkcijas)

Šī apmācība izskaidros atšķirību starp publiskajām un privātajām deklarācijām VBA un to, kā norādīt moduļus kā privātus.

Publiskās un privātās apakšprocedūras

Procedūras (apakšdaļas un funkcijas) VBA var pasludināt par privātu vai publisku. Ja tie ir publiski, tas nozīmē, ka jūs tos varēsit redzēt no Excel makro loga un tos var izsaukt no jebkuras vietas jūsu VBA projektā. Ja tie ir privāti, tos nevar redzēt Excel makro logā, un tos var izmantot tikai tajā modulī, kurā tie ir deklarēti (izmantojot parastās metodes, šī raksta apakšā skatiet veidus, kā piekļūt privātajām procedūrām no citiem moduļiem). .

Publiskās funkcijas var izsaukt kā iebūvētas Excel funkcijas Excel darblapā.

Piezīme: Mainīgie un konstantes var būt arī publiski vai privāti.

Excel makro logs

Pēc noklusējuma Excel makro (lielākā daļa VBA procedūru) ir redzami darbgrāmatas lietotājiem makro logā:

Tie tiek ņemti vērā Publisks procedūras. Jūs varat skaidri definēt procedūras kā publiskas, pirms apakšpaziņojuma pievienojot “Publisks”:

123 Publiskā apakšnodaļa HelloWorld ()MsgBox "Sveika pasaule"Beigu apakš

Ja procedūru nenosakāt kā publisku, tā tiks uzskatīta par publisku.

Lai procedūru pasludinātu par privātu, pirms procedūras apakšpaziņojuma vienkārši pievienojiet “Privāta”:

123 Privāts apakšnodaļa HelloEveryone ()MsgBox "Sveiki visiem"Beigu apakš

Otrā procedūra Excel lietotājiem nebūtu redzama makro logā, bet to joprojām var izmantot jūsu VBA kodā.

Procedūras ar argumentiem

Apakšprocedūrām var būt argumenti. Argumenti ir ieeja apakšprocedūrā:

123 Sub Hello (strName kā virkne)MsgBox "Sveiki" un strNameBeigu apakš

Ja apakšprocedūrai ir argumenti, tā nekad netiks parādīta makro logā neatkarīgi no tā, vai tā ir deklarēta kā publiska, jo nav iespējams deklarēt argumentus.

Funkcijas arī nekad netiks parādītas makro logā neatkarīgi no tā, vai tās ir pasludinātas par publiskām.

Programmas Excel publiskās funkcijas var izmantot tieši darblapā kā lietotāja definētu funkciju (UDF). Tā būtībā ir pielāgota formula, kuru var izsaukt tieši darblapā. Tos var atrast kategorijā “Lietotāja definēts” logā “Ievietot funkciju” vai arī tos var ierakstīt tieši šūnā.

VBA programmēšana | Kodu ģenerators strādā jūsu labā!

Procedūru izmantošana starp moduļiem jūsu VBA projektā

Publiskās procedūras var izsaukt no jebkura jūsu VBA projekta moduļa vai veidlapas.

Mēģinot izsaukt privātu procedūru no cita moduļa, radīsies kļūda (piezīme: skatiet šī raksta apakšdaļu.)

Piezīme: Publiskās procedūras un mainīgie klases moduļos darbojas nedaudz savādāk un neietilpst šī raksta darbības jomā.

Dažādi moduļi var glabāt procedūras ar tādu pašu nosaukumu, ja tie abi ir privāti.

Ja divām vai vairākām procedūrām ir vienāds nosaukums un tās tiek pasludinātas par publiskām, palaižot kodu, tiks parādīta kompilācijas kļūda “Konstatēts neskaidrs nosaukums”.

Privātie moduļi

Pēc noklusējuma moduļi ir publiski.

Lai moduli padarītu privātu, moduļa augšdaļā ievietojiet šādu atslēgvārdu.

1 Opcija Privāts modulis

Ja jūs paziņojat moduli par privātu, tad visas moduļa procedūras Excel lietotājiem nebūs redzamas. Funkciju procedūras neparādīsies logā Ievietot funkciju, bet tās joprojām var izmantot Excel lapā, ja vien lietotājs zina funkcijas nosaukumu!

Apakšprocedūras netiks parādītas makro logā, taču tās joprojām būs pieejamas izmantošanai VBA projektā.

Piekļuve privātai procedūrai no cita moduļa

Kā minēts iepriekš, privātās procedūras nav pieejamas citos koda moduļos ar “parastajām” metodēm. Tomēr privātajām procedūrām varat piekļūt, izmantojot Lietošana. Palaist komanda pieejama VBA.

Apsveriet šādus 3 moduļus.

2. modulis ir a Privāts Modulis ar a Publisks Apakšprocedūra, savukārt 3. modulis ir Publisks modulis ar a Privāts Apakšprocedūra.

1. modulī mēs varam saukt Hello World - Opcija Privāts modulis augšpusē netraucē mums izsaukt apakšprocedūru - viss, kas tam jādara, ir paslēpt apakšprocedūru makro logā.

Mums arī nav nepieciešams izsaukuma paziņojums - tas ir paredzēts, lai atvieglotu koda lasīšanu.

Kods varētu izskatīties arī šādi:

1234 Sub CallHelloFromPrivate ()'piezvanīt apakšam no privātā moduļaSveika pasauleBeigu apakš

Mēs varam arī palaist HelloWorld apakšprocedūru, izmantojot VBA Lietošana. Palaist komandu.

Tomēr 3. modulī GoodMorningWorld procedūra ir pasludināta par privātu. Jūs nevarat to izsaukt no cita moduļa, izmantojot “parastos” līdzekļus, ti, izsaukuma paziņojumu.

Jums ir jāizmanto Lietojumprogramma. RunCommand lai palaistu privātu apakšnodaļu no cita moduļa.

1234 Sub CallGoodMorning ()"palaist privātu apakšprogrammu no publiska moduļaApplication.Run ("GoodMorningWorld")Beigu apakš

Ievērojiet, kad lietojat Lietojumprogramma. RunCommand komandu, apakšprocedūras nosaukums jāievieto apgrieztos komatos.

Ja mēs mēģinām izmantot izsaukuma paziņojumu, lai palaistu GoodMorningWorld apakšprocedūru, radīsies kļūda.

Jums palīdzēs attīstību vietā, daloties lapu ar draugiem

wave wave wave wave wave