VBA Private vs Public Procedures (Subs & Functions)

Denna handledning kommer att förklara skillnaden mellan offentliga och privata deklarationer i VBA och hur man anger moduler som privata.

Offentliga kontra privata delprocedurer

Procedurer (sub och funktioner) kan deklareras antingen som privata eller offentliga i VBA. Om de är offentliga betyder det att du skulle kunna se dem inifrån Excel -makrofönstret och de kan ringas var som helst i ditt VBA -projekt. Om de är privata kan de inte ses i Excel -makrofönstret och är endast tillgängliga för användning i modulen där de deklareras (med vanliga metoder, se botten av den här artikeln för sätt att komma åt privata procedurer från andra moduler) .

Offentliga funktioner kan kallas som inbyggda Excel-funktioner i Excel-kalkylbladet.

Notera: Variabler och konstanter kan också vara offentliga eller privata.

Excel -makrofönster

Som standard är Excel -makron (de flesta VBA -förfaranden) synliga för arbetsbokanvändare i makrofönstret:

Dessa övervägs offentlig förfaranden. Du kan uttryckligen definiera förfaranden som offentliga genom att lägga till "Offentlig" före deluttalandet:

123 Public Sub HelloWorld ()MsgBox "Hej världen"Avsluta Sub

Om du inte definierar förfarandet som offentligt, antas det som offentligt.

För att förklara ett förfarande som privat, lägg bara till "Privat" före procedurens underuttalande:

123 Privat sub HelloEveryone ()MsgBox "Hej alla"Avsluta Sub

Den andra proceduren är inte synlig i makrofönstret för Excel -användare, men kan fortfarande användas i din VBA -kod.

Förfaranden med argument

Underprocedurer kan ha argument. Argument är ingångar till delproceduren:

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

Om ett underförfarande har argument kommer det aldrig att visas i makrofönstret, oavsett om det är deklarerat offentligt eftersom det inte finns något sätt att deklarera argumenten.

Funktioner kommer aldrig att visas i makrofönstret, oavsett om de förklaras offentliga.

Offentliga funktioner i Excel kan användas direkt i ett kalkylblad som en 'användardefinierad funktion' (UDF). Detta är i princip en anpassad formel som kan kallas direkt i ett kalkylblad. De finns i kategorin "Användardefinierad" i fönstret "Infoga funktion" eller kan skrivas in direkt i en cell.

VBA -programmering | Kodgenerator fungerar för dig!

Använda procedurer mellan moduler i ditt VBA -projekt

Offentliga förfaranden kan anropas från valfri modul eller formulär inom ditt VBA -projekt.

Försök att ringa ett privat förfarande från en annan modul kommer att resultera i ett fel (Obs: se botten av denna artikel för en lösning).

Notera: Offentliga förfaranden och variabler i klassmoduler beter sig något annorlunda och ligger utanför tillämpningsområdet för denna artikel.

Olika moduler kan lagra procedurer med samma namn, förutsatt att de båda är privata.

Om två eller flera förfaranden har samma namn och förklaras offentliga får du ett kompileringsfel med ”Tvetydigt namn upptäckt” när du kör kod.

Privata moduler

Som standard är moduler offentliga.

För att göra en modul privat sätter du följande sökord högst upp i modulen.

1 Alternativ privat modul

Om du förklarar en modul som privat är alla procedurer i modulen inte synliga för Excel -användare. Funktionsprocedurer visas inte i fönstret Infoga funktion men kan fortfarande användas i Excel -arket så länge användaren vet namnet på funktionen!

Delprocedurer visas inte i makrofönstret men kommer fortfarande att vara tillgängliga för användning inom VBA -projektet.

Få tillgång till ett privat förfarande från en annan modul

Som nämnts ovan är privata förfaranden otillgängliga i andra kodmoduler med "normala" metoder. Du kan dock komma åt privata procedurer med hjälp av Application.Run kommando tillgängligt i VBA.

Tänk på följande 3 moduler.

Modul 2 är en Privat Modul med a offentlig Delprocedur, medan modul3 är offentlig modul med en Privat Delprocedur.

I modul 1 kan vi kalla Hello World - the Alternativ privat modul högst upp hindrar oss inte från att ringa delproceduren - allt det är att göra är att dölja delproceduren i makrofönstret.

Vi behöver inte heller samtalsutdraget - det är där för att göra koden lättare att läsa.

Koden kan också se ut så här nedan:

1234 Sub CallHelloFromPrivate ()'ring en sub från en privat modulHej världenAvsluta Sub

Vi kan också köra HelloWorld -delproceduren med hjälp av VBA Application.Run kommando.

I modul3 har dock GoodMorningWorld -förfarandet förklarats privat. Du kan inte kalla det från en annan modul med hjälp av "normala" medel, dvs Call -satsen.

Du måste använda Application.RunCommand för att köra en privat sub från en annan modul.

1234 Sub CallGoodMorning ()'kör en privat sub från en offentlig modulApplication.Run ("GoodMorningWorld")Avsluta Sub

Lägg märke till när du använder Application.RunCommand -kommandot måste du ange delprocedurens namn inom inverterade kommatecken.

Om vi ​​försöker använda Call -satsen för att köra GoodMorningWorld -delproceduren skulle ett fel uppstå.

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave