VBA Private vs Public Procedures (Subs & Functions)

Denne opplæringen vil forklare forskjellen mellom offentlige og private erklæringer i VBA og hvordan du spesifiserer moduler som private.

Offentlige kontra private delprosedyrer

Prosedyrer (sub og funksjoner) kan erklæres enten private eller offentlige i VBA. Hvis de er offentlige, betyr det at du vil kunne se dem fra Excel -makrovinduet, og de kan ringes fra hvor som helst i ditt VBA -prosjekt. Hvis de er private, kan de ikke sees i Excel -makrovinduet og er bare tilgjengelige for bruk i modulen de er deklarert i (ved bruk av vanlige metoder, se bunnen av denne artikkelen for å få tilgang til private prosedyrer fra andre moduler) .

Offentlige funksjoner kan kalles som innebygde Excel-funksjoner i Excel-regnearket.

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

Makrovindu i Excel

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

Disse vurderes Offentlig prosedyrer. Du kan eksplisitt definere prosedyrer som offentlige ved å legge til "Offentlig" før deluttalelsen:

123 Offentlig sub HelloWorld ()MsgBox "Hei verden"Slutt Sub

Hvis du ikke definerer prosedyren som offentlig, antas det som offentlig.

For å erklære en prosedyre som privat, bare legg til "Privat" før prosedyreunderklæringen:

123 Privat sub HelloEveryone ()MsgBox "Hei alle sammen"Slutt Sub

Den andre prosedyren vil ikke være synlig i makrovinduet for Excel -brukere, men kan fortsatt brukes i VBA -koden.

Prosedyrer med argumenter

Delprosedyrer kan ha argumenter. Argumenter er innspill til delprosedyren:

123 Sub Hello (strName as string)MsgBox "Hei" og strNameSlutt Sub

Hvis en delprosedyre har argumenter, vil den aldri vises i makrovinduet, uansett om den er erklært offentlig fordi det ikke er noen måte å deklarere argumentene på.

Funksjoner vil heller aldri vises i makrovinduet, uansett om de er erklært offentlige.

Offentlige funksjoner i Excel kan brukes direkte i et regneark som en 'brukerdefinert funksjon' (UDF). Dette er i utgangspunktet en tilpasset formel som kan kalles direkte i et regneark. De finnes i kategorien "Brukerdefinert" i vinduet "Sett inn funksjon", eller kan skrives direkte inn i en celle.

VBA -programmering | Kodegenerator fungerer for deg!

Bruke prosedyrer mellom moduler i ditt VBA -prosjekt

Offentlige prosedyrer kan kalles fra hvilken som helst modul eller skjema i ditt VBA -prosjekt.

Hvis du prøver å ringe til en privat prosedyre fra en annen modul, vil det resultere i en feil (Merk: se bunnen av denne artikkelen for å komme rundt).

Merk: Offentlige prosedyrer og variabler i klassemoduler oppfører seg litt annerledes og ligger utenfor denne artikkelen.

Ulike moduler kan lagre prosedyrer med samme navn, forutsatt at de begge er private.

Hvis to eller flere prosedyrer har samme navn og blir erklært offentlige, får du en kompileringsfeil med "tvetydig navn oppdaget" når du kjører kode.

Private moduler

Som standard er moduler offentlige.

For å gjøre en modul privat, setter du følgende søkeord øverst i modulen.

1 Alternativ privat modul

Hvis du erklærer en modul som privat, vil ikke alle prosedyrer i modulen være synlige for Excel -brukere. Funksjonsprosedyrer vises ikke i vinduet Sett inn funksjon, men kan fortsatt brukes i Excel -arket så lenge brukeren vet navnet på funksjonen!

Delprosedyrer vil ikke vises i makrovinduet, men vil fortsatt være tilgjengelige for bruk i VBA -prosjektet.

Få tilgang til en privat prosedyre fra en annen modul

Som nevnt ovenfor er private prosedyrer utilgjengelige i andre kodemoduler med "normale" metoder. Du kan imidlertid få tilgang til private prosedyrer ved å bruke Application.Run kommando tilgjengelig i VBA.

Vurder følgende 3 moduler.

Modul 2 er en Privat Modul med en Offentlig Delprosedyre, mens modul3 er Offentlig modul med en Privat Delprosedyre.

I modul 1 kan vi kalle Hello World - the Alternativ privat modul øverst hindrer ikke oss i å ringe delprosedyren - alt det er å gjøre er å skjule delprosedyren i makrovinduet.

Vi trenger heller ikke Call -erklæringen - den er der for å gjøre koden lettere å lese.

Koden kan også se slik ut nedenfor:

1234 Sub CallHelloFromPrivate ()'ring en sub fra en privat modulHei VerdenSlutt Sub

Vi kan også kjøre HelloWorld -delprosedyren ved å bruke VBA Application.Run kommando.

I modul 3 er imidlertid GoodMorningWorld -prosedyren erklært privat. Du kan ikke kalle det fra en annen modul ved hjelp av "normale" midler, dvs. Call -setningen.

Du må bruke Application.RunCommand å kjøre en privat sub fra en annen modul.

1234 Sub CallGoodMorning ()'kjør en privat sub fra en offentlig modulApplication.Run ("GoodMorningWorld")Slutt Sub

Legg merke til når du bruker Application.RunCommand kommando, må du sette navnet på delprosedyren i inverterte kommaer.

Hvis vi prøver å bruke Call -setningen for å kjøre GoodMorningWorld -delprosedyren, vil det oppstå en feil.

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave