Ten samouczek wyjaśni różnicę między deklaracjami publicznymi i prywatnymi w VBA oraz jak określić moduły jako prywatne.
Procedury podrzędne publiczne a prywatne
Procedury (podrzędne i funkcje) można zadeklarować jako prywatne lub publiczne w VBA. Jeśli są publiczne, oznacza to, że można je zobaczyć w oknie makr programu Excel i można je wywołać z dowolnego miejsca w projekcie VBA. Jeśli są prywatne, nie można ich zobaczyć w oknie makr programu Excel i można ich używać tylko w module, w którym są zadeklarowane (przy użyciu normalnych metod, zobacz na dole tego artykułu, jak uzyskać dostęp do prywatnych procedur z innych modułów) .
Funkcje publiczne można wywoływać jak wbudowane funkcje programu Excel w arkuszu programu Excel.
Notatka: Zmienne i stałe mogą być również publiczne lub prywatne.
Okno makr programu Excel
Domyślnie makra programu Excel (większość procedur VBA) są widoczne dla użytkowników skoroszytu w oknie makr:
Są one brane pod uwagę Publiczny procedury. Możesz jawnie zdefiniować procedury jako publiczne, dodając „Publiczne” przed instrukcją Sub:
123 | Publiczny Sub HelloWorld()MsgBox "Witaj świecie"Napis końcowy |
Jeśli nie określisz procedury jako publicznej, zostanie ona uznana za publiczną.
Aby zadeklarować procedurę jako Prywatną, po prostu dodaj „Prywatne” przed podinstrukcją procedury:
123 | Prywatna Sub HelloEveryone()MsgBox "Witam wszystkich"Napis końcowy |
Druga procedura nie byłaby widoczna w oknie Makra dla użytkowników programu Excel, ale nadal może być używana w kodzie VBA.
Procedury z argumentami
Procedury podrzędne mogą mieć argumenty. Argumenty są danymi wejściowymi do podprocedury:
123 | Sub Witaj(strName jako ciąg)MsgBox "Witaj " i strNameNapis końcowy |
Jeśli procedura podrzędna ma argumenty, nigdy nie pojawi się w oknie makr, niezależnie od tego, czy została zadeklarowana jako publiczna, ponieważ nie ma możliwości zadeklarowania argumentów.
Funkcje również nigdy nie pojawią się w oknie makr, niezależnie od tego, czy są zadeklarowane jako publiczne.
Funkcje publiczne w programie Excel mogą być używane bezpośrednio w arkuszu jako „funkcja zdefiniowana przez użytkownika” (UDF). Jest to w zasadzie niestandardowa formuła, którą można wywołać bezpośrednio w arkuszu. Można je znaleźć w kategorii „Zdefiniowane przez użytkownika” w oknie „Wstaw funkcję” lub można je wpisać bezpośrednio do komórki.
Programowanie VBA | Generator kodu działa dla Ciebie!
Korzystanie z procedur między modułami w projekcie VBA
Procedury publiczne można wywoływać z dowolnego modułu lub formularza w projekcie VBA.
Próba wywołania procedury prywatnej z innego modułu zakończy się błędem (uwaga: patrz na dole tego artykułu, aby obejść ten problem).
Notatka: Procedury publiczne i zmienne w modułach klas zachowują się nieco inaczej i wykraczają poza zakres tego artykułu.
Różne moduły mogą przechowywać procedury o tej samej nazwie, pod warunkiem, że obie są prywatne.
Jeśli co najmniej dwie procedury mają taką samą nazwę i są zadeklarowane jako publiczne, podczas uruchamiania kodu pojawi się błąd kompilacji „Wykryto niejednoznaczną nazwę”.
Moduły prywatne
Domyślnie moduły są publiczne.
Aby uczynić moduł prywatnym, należy umieścić następujące słowo kluczowe na górze modułu.
1 | Opcja modułu prywatnego |
Jeśli zadeklarujesz moduł jako prywatny, żadne procedury w module nie będą widoczne dla użytkowników programu Excel. Procedury funkcji nie pojawią się w oknie Wstaw funkcję, ale nadal można ich używać w arkuszu Excel, o ile użytkownik zna nazwę funkcji!
Procedury podrzędne nie pojawią się w oknie makr, ale nadal będą dostępne do użycia w projekcie VBA.
Dostęp do prywatnej procedury z innego modułu
Jak wspomniano powyżej, procedury prywatne są niedostępne w innych modułach kodu „normalnymi” metodami. Możesz jednak uzyskać dostęp do prywatnych procedur, korzystając z Aplikacja.Uruchom polecenie dostępne w VBA.
Rozważ następujące 3 moduły.
Moduł 2 to Prywatny Moduł z Publiczny Procedura podrzędna, podczas gdy moduł 3 to Publiczny moduł z Prywatny Procedura podrzędna.
W Module 1 możemy nazwać Hello World - the Opcja modułu prywatnego na górze nie przeszkadza nam w wywołaniu procedury Sub - służy jedynie do ukrycia procedury Sub w oknie Macro.
Nie potrzebujemy również instrukcji Call - służy ona do łatwiejszego odczytania kodu.
Kod mógłby również wyglądać tak poniżej:
1234 | Wywołanie pomocniczeHelloFromPrivate()'zadzwoń do sub z modułu prywatnegoWitaj świecieNapis końcowy |
Możemy również uruchomić procedurę podrzędną HelloWorld za pomocą VBA Aplikacja.Uruchom Komenda.
Jednak w Module 3 procedura GoodMorningWorld została uznana za prywatną. Nie można go wywołać z innego modułu przy użyciu „normalnych” środków, tj. instrukcji Call.
Musisz użyć Aplikacja.RunCommand aby uruchomić Subskrypcję prywatną z innego modułu.
1234 | Sub ZadzwońDzień dobry()„uruchom prywatną subskrypcję z modułu publicznego”Application.Run ("GoodMorningWorld")Napis końcowy |
Zwróć uwagę, kiedy używasz Application.RunCommand polecenie, musisz umieścić nazwę procedury podrzędnej w cudzysłowie.
Jeśli spróbujemy użyć instrukcji Call do uruchomienia procedury podrzędnej GoodMorningWorld, wystąpi błąd.