VBA Private vs Public Procedures (Subs & Functions)

Denne vejledning forklarer forskellen mellem offentlige og private erklæringer i VBA og hvordan man angiver moduler som private.

Offentlige kontra private delprocedurer

Procedurer (sub og funktioner) kan erklæres enten private eller offentlige i VBA. Hvis de er offentlige, betyder det, at du ville kunne se dem indefra Excel -makrovinduet, og de kan kaldes fra hvor som helst i dit VBA -projekt. Hvis de er private, kan de ikke ses i Excel -makrovinduet og er kun tilgængelige til brug inden for det modul, hvor de er deklareret (ved hjælp af normale metoder, se bunden af ​​denne artikel for måder at få adgang til private procedurer fra andre moduler) .

Offentlige funktioner kan kaldes som indbyggede Excel-funktioner i Excel-regnearket.

Bemærk: Variabler og konstanter kan også være offentlige eller private.

Excel makro vindue

Som standard er Excel -makroer (de fleste VBA -procedurer) synlige for projektmappebrugere i makrovinduet:

Disse overvejes Offentlig procedurer. Du kan eksplicit definere procedurer som offentlige ved at tilføje "Offentlig" før underudtalelsen:

123 Offentlig sub HelloWorld ()MsgBox "Hej verden"Afslut Sub

Hvis du ikke definerer proceduren som offentlig, antages det som offentligt.

For at erklære en procedure som privat skal du blot tilføje "Privat" før procedurens undererklæring:

123 Privat sub HelloEveryone ()MsgBox "Hej alle"Afslut Sub

Den anden procedure ville ikke være synlig i makrovinduet for Excel -brugere, men kan stadig bruges i din VBA -kode.

Procedurer med argumenter

Underprocedurer kan have argumenter. Argumenter er input til delproceduren:

123 Sub Hello (strName as string)MsgBox "Hej" & strNameAfslut Sub

Hvis en delprocedure har argumenter, vises den aldrig i makrovinduet, uanset om den er erklæret offentlig, fordi der ikke er nogen måde at erklære argumenterne på.

Funktioner vises heller aldrig i makrovinduet, uanset om de er erklæret offentlige.

Offentlige funktioner i Excel kan bruges direkte i et regneark som en 'Brugerdefineret funktion' (UDF). Dette er dybest set en brugerdefineret formel, der kan kaldes direkte i et regneark. De kan findes i kategorien 'Brugerdefineret' i vinduet 'Indsæt funktion' eller kan indtastes direkte i en celle.

VBA -programmering | Kodegenerator virker for dig!

Brug af procedurer mellem moduler i dit VBA -projekt

Offentlige procedurer kan kaldes fra ethvert modul eller formular i dit VBA -projekt.

Hvis du prøver at kalde en privat procedure fra et andet modul, vil det resultere i en fejl (Bemærk: se bunden af ​​denne artikel for en omvej).

Bemærk: Offentlige procedurer og variabler i klassemoduler opfører sig lidt anderledes og er uden for denne artikels anvendelsesområde.

Forskellige moduler kan gemme procedurer med samme navn, forudsat at de begge er private.

Hvis to eller flere procedurer har samme navn og erklæres offentlige, får du en kompileringsfejl med ‘Tvetydigt navn opdaget’, når du kører kode.

Private moduler

Som standard er moduler offentlige.

For at gøre et modul privat, sætter du følgende søgeord øverst i modulet.

1 Mulighed Privat modul

Hvis du erklærer et modul som privat, er alle procedurer i modulet ikke synlige for Excel -brugere. Funktionsprocedurer vises ikke i vinduet Indsæt funktion, men kan stadig bruges i Excel -arket, så længe brugeren kender navnet på funktionen!

Underprocedurer vises ikke i makrovinduet, men vil stadig være tilgængelige til brug inden for VBA -projektet.

Adgang til en privat procedure fra et andet modul

Som nævnt ovenfor er private procedurer utilgængelige i andre kodemoduler ved hjælp af "normale" metoder. Du kan dog få adgang til private procedurer ved hjælp af Application.Run kommando tilgængelig i VBA.

Overvej følgende 3 moduler.

Modul 2 er a Privat Modul med en Offentlig Delprocedure, hvorimod modul3 er Offentlig modul med en Privat Underprocedure.

I modul 1 kan vi kalde Hello World - the Mulighed Privat modul øverst forhindrer os ikke i at kalde delproceduren - alt, hvad den skal gøre, er at skjule delproceduren i makrovinduet.

Vi har heller ikke brug for Call -erklæringen - den er der for at gøre koden lettere at læse.

Koden kan også se sådan ud herunder:

1234 UnderopkaldHelloFromPrivate ()'ring til en sub fra et privat modulHej VerdenAfslut Sub

Vi kan også køre HelloWorld -delproceduren ved hjælp af VBA Application.Run kommando.

I modul3 er GoodMorningWorld -proceduren imidlertid blevet erklæret privat. Du kan ikke kalde det fra et andet modul ved hjælp af 'normale' midler, dvs. opkaldssætningen.

Du skal bruge Application.RunCommand at køre en privat sub fra et andet modul.

1234 Sub CallGoodMorning ()'køre en privat sub fra et offentligt modulApplication.Run ("GoodMorningWorld")Afslut Sub

Bemærk, når du bruger Application.RunCommand kommando, skal du sætte navnet på underproceduren inden for inverterede kommaer.

Hvis vi prøver at bruge Call -erklæringen til at køre GoodMorningWorld -delproceduren, ville der opstå en fejl.

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave