We wszystkich językach programowania mamy specyfikatory dostępu do zmiennych, które definiują, skąd można uzyskać dostęp do zdefiniowanej zmiennej. Excel VBA nie jest wyjątkiem. VBA również ma specyfikatory zakresu. Te specyfikatory zakresu mogą służyć do ustawiania widoczności/zakresu zmiennej w Excel VBA.
W Excel VBA mamy trzy typy specyfikatorów zakresu:
- Poziom procedury
- Prywatny - poziom modułu
- Publiczny - poziom projektu
Zakres zmiennej poziomu procedury VBA
Zmienne zadeklarowane w podprogramie są dostępne tylko w tej procedurze/funkcji. Mają zakres na poziomie procedury. Zwykle są deklarowane za pomocą słowa kluczowego Dim. Jeśli moduł jest niejawną opcją, to zmienna mogła nie zostać zadeklarowana, tylko użyta bezpośrednio.
W poniższym przykładzie mamy test zasięgu podprogramu, który ma zmienne x i y. Kiedy uruchamiamy pierwszy podprogram, działa on idealnie i wypisuje sumę X i Y
Opcja Jawne PodzakresTest() Dim x, y jako liczba całkowita ' Zmienna poziomu procedury w VBA x = 2 y = 3 Debug.Print x + y End Sub Sub sum() x = 5 y = 7 Debug.Print x + y End Sub
Ale po uruchomieniu sumy podprogramu pojawia się błąd, że zmienna nie jest zadeklarowana. Czemu? Ponieważ X i Y są prywatne dla procedury scopeTest i suma podprogramu nie ma do nich dostępu. Dlatego łódź podwodna popada w błąd.
Zmienna prywatna VBA - zakres na poziomie modułu
Jeśli chcesz zadeklarować zmienną, która ma być dostępna w całym module, deklarujesz tę zmienną jako prywatną na górze modułu, przed podprogramem lub funkcją.
Zmienne zadeklarowane przed podprogramem w module są domyślnie Prywatne. Nawet jeśli zadeklarujesz je za pomocą słowa kluczowego Dim. Ale mówiąc konkretnie, mądrze jest użyć słowa kluczowego Private.
Poniższe dwie procedury znajdują się w tym samym module, module 1.
Option Explicit 'Zmienna poziomu modułu w VBA. Obie zmienne x i y są prywatne dla tego modułu. i „można uzyskać dostęp z dowolnej podrzędnej lub funkcji w tym module. Dim x As Integer Prywatny y As Integer Sub scopeTest() 'Dostęp do tego można uzyskać z dowolnego modułu w projekcie x = 2 y = 3 Debug.Print x + y End Sub Prywatna suma podrzędna() ' Nie można uzyskać dostępu z innych modułów x = 5 y = 7 Debug.Print x + y End Sub
Powyższe dwie funkcje będą działać doskonale, ponieważ zmienne x i y są prywatnymi zmiennymi tego modułu.
Ważny: Ostatnie wartości przechowywane w x i y są zachowywane aż do całego modułu. Jeśli najpierw uruchomimy subscopeTest i nie zainicjujemy wartości x i y w podsumie i nie uruchomimy go, to początkowa wartość x i y pozostanie niezmieniona.
Poniższy podprogram jest zdefiniowany w oddzielnym module, module 2. Gdy próbuję uzyskać dostęp do zmiennej z innego modułu, procedura (lub funkcja) VBA napotyka błąd.
Ale jeśli spróbuję wywołać podprogram suma z modułu 1 w module 2 działa to idealnie. Aby Twoja funkcja i podprogramy były prywatne dla modułu, użyj słowa kluczowego Private przed sub i function.
Notatka:- Zmienne zadeklarowane przed podprogramem lub funkcją w module są domyślnie prywatne dla modułu. Możesz użyć Prywatnysłowo kluczowe. Jednak funkcje i podprogramy są domyślnie publiczne i można do nich uzyskać dostęp z dowolnego modułu w projekcie. Aby uczynić funkcje i podprogramy prywatnymi dla modułu, musisz użyć słowa kluczowego Private.
Zmienne publiczne - zakres na poziomie projektu
Jak dowiedzieliśmy się w powyższych przykładach, funkcja i podprogramy są domyślnie publiczne i można do nich uzyskać dostęp z dowolnego modułu, ale zmienne nie są. Aby udostępnić zmienną z dowolnego modułu w Excel VBA,używamy słowa kluczowego Public.
Aby zadeklarować zmienną publiczną w projekcie, zadeklarowałeś je na górze modułu, przed jakąkolwiek funkcją lub podprogramem ze słowem kluczowym public. Poniższy kod jest napisany w module 1.
Option Explicit 'Zmienna poziomu projektu w VBA. Publiczny x As Integer Publiczny y As Integer Public Sub scopeTest() ' Można uzyskać do niego dostęp z dowolnego modułu w projekcie x = 2 y = 3 End Sub Private Sub sum() ' Nie można uzyskać dostępu z innych modułów x = 5 y = 7 Debug.Print x + y Koniec Sub
A ten podprogram jest w innym module, module 2.
Option Explicit Sub mul() Wywołaj scopeTest 'Wywołaj sum ' nie zadziała, ponieważ jest prywatna dla modułu 1 Debug.Print x * y End Sub
Tym razem działa idealnie.
Najpierw nazwałem test zakresu podprogramu. Ponieważ scopeTest jest publiczny, jest wywoływany. Inicjuje wartości x i y. Następnie mnożymy x i y. Ponieważ podprogram scopeTest zainicjował go wartościami 2 i 3, otrzymujemy wynik 6.
Tak, tak, w ten sposób można używać specyfikatorów zakresu zmiennych w programie Excel do kontrolowania widoczności zmiennych, funkcji i podprogramów w projektach Excel VBA.
Próbowałem wyjaśnić specyfikatory dostępu VBA w najprostszy możliwy sposób. Mam nadzieję, że to wyjaśniało. Jeśli masz jakiekolwiek wątpliwości dotyczące tego artykułu lub jakichkolwiek innych wątpliwości związanych z VBA, zapytaj mnie w sekcji komentarzy poniżej. Chętnie tu od Ciebie.
Argumenty ByRef i ByVal |Gdy argument jest przekazywany jako argument ByRef do innej podrzędnej lub funkcji, wysyłane jest odwołanie do rzeczywistej zmiennej. Wszelkie zmiany dokonane w kopii zmiennej zostaną odzwierciedlone w oryginalnym argumencie.
Usuń arkusze bez monitów o potwierdzenie za pomocą VBA w Microsoft Excel|Ponieważ usuwasz arkusze za pomocą VBA, wiesz, co robisz. Chcesz powiedzieć programowi Excel, aby nie wyświetlał tego ostrzeżenia i usuwał ten cholerny arkusz.
Dodaj i zapisz nowy skoroszyt za pomocą VBA W programie Microsoft Excel 2016|W tym kodzie najpierw utworzyliśmy odwołanie do obiektu skoroszytu. A następnie zainicjalizowaliśmy go nowym obiektem skoroszytu. Zaletą tego podejścia jest to, że możesz łatwo wykonywać operacje na tym nowym skoroszycie. Jak zapisywanie, zamykanie, usuwanie itp.
Wyświetl komunikat na pasku stanu Excel VBA Pasek stanu w programie Excel może być używany jako monitor kodu. Gdy twój kod VBA jest długi i wykonujesz kilka zadań za pomocą VBA, często wyłączasz aktualizację ekranu, aby nie widzieć migotania ekranu
Wyłącz komunikaty ostrzegawcze przy użyciu VBA W programie Microsoft Excel 2016|Ten kod nie tylko wyłącza alerty VBA, ale także zwiększa wydajność czasową kodu. Zobaczmy jak.
Popularne artykuły:
50 skrótów Excela, które zwiększą Twoją produktywność | Przyspiesz swoje zadanie. Te 50 skrótów przyspieszy pracę w programie Excel.
Funkcja WYSZUKAJ.PIONOWO w programie Excel | Jest to jedna z najczęściej używanych i popularnych funkcji programu Excel, która służy do wyszukiwania wartości z różnych zakresów i arkuszy.
LICZ.JEŻELI w Excelu 2016 | Policz wartości z warunkami za pomocą tej niesamowitej funkcji. Nie musisz filtrować danych, aby policzyć konkretną wartość. Funkcja Countif jest niezbędna do przygotowania deski rozdzielczej.
Jak korzystać z funkcji SUMIF w programie Excel? | To kolejna ważna funkcja deski rozdzielczej. Pomaga to zsumować wartości w określonych warunkach.