Procedury prywatne vs publiczne VBA (subskrypcje i funkcje)

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.

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave