Podprogram Excel VBA: Jak wywołać sub w VBA z przykładem

⚡ Inteligentne podsumowanie

Podprogramy VBA w programie Excel grupują blok kodu, który wykonuje zadanie bez zwracania wartości. Ta strona omawia zasady nazewnictwa, składnię funkcji Sub, wywoływanie funkcji Sub z przycisku polecenia oraz różnice między funkcją Sub a funkcją.

  • 📦 Definicja: Podprogram wykonuje określone zadanie i nie zwraca żadnej wartości do kodu, który go wywołał.
  • ♻️ Możliwość ponownego wykorzystania: Tę samą podprocedurę można wywołać wielokrotnie z dowolnego miejsca w projekcie.
  • 🔤 Zasady nazewnictwa: Nazwa nie zawiera spacji, zaczyna się od litery lub znaku podkreślenia i nigdy nie jest słowem kluczowym VBA.
  • 🧾 Składnia: Prywatna nazwa podrzędna (ByVal arg As String) otwiera blok, a End Sub go zamyka.
  • 🖱️. Powołanie: Zdarzenie kliknięcia przycisku polecenia wywołuje podprocedurę i przekazuje jej argumenty.
  • ▶ ️ Uruchamianie bezpośrednie: Klawisz F5, okno dialogowe Makra i słowo kluczowe Wywołanie uruchamiają podprogram bez użycia przycisku.
  • 🔁 Podfunkcja lub funkcja: Wybierz funkcję, jeśli musi zostać zwrócona wartość, w przeciwnym razie wybierz funkcję podrzędną.

Podprogram Excel VBA

Co to jest podprogram w VBA?

A Podprogram w VBA to fragment kodu, który wykonuje określone zadanie opisane w kodzie, ale nie zwraca wyniku ani wartości. Podprogramy służą do dzielenia dużych fragmentów kodu na małe, łatwe do zarządzania części. Podprogramy można przywoływać wielokrotnie z dowolnego miejsca w programie.

Załóżmy, że utworzyłeś interfejs użytkownika z polami tekstowymi do akceptowania danych wejściowych użytkownika. Możesz utworzyć podprocedurę, która czyści zawartość pól tekstowych. Podprocedura wywołania VBA jest odpowiednia w takim scenariuszu, ponieważ nie chcesz zwracać żadnych wyników.

Po co używać podprogramów

  • Podziel kod na mały, łatwy do zarządzania kod: Przeciętny program komputerowy ma tysiące i tysiące linii kodu źródłowego. To wprowadza złożoność. Podprogramy pomagają rozwiązać ten problem, dzieląc program na małe, łatwe do opanowania fragmenty kodu.
  • Code wielokrotnego użytku. Załóżmy, że masz program, który potrzebuje dostępu do bazy danych, prawie wszystkie okna w programie będą musiały wchodzić w interakcję z bazą danych. Zamiast pisać oddzielny kod dla tych okien, możesz utworzyć funkcję, która obsługuje wszystkie interakcje z bazą danych. Następnie możesz ją wywołać z dowolnego okna, które chcesz.
  • Podprogramy i funkcje są samodokumentujące. Załóżmy, że masz funkcję obliczLoanInterest i inną funkcję connectToDatabase. Wystarczy spojrzeć na nazwę podprogramu/funkcji, a programista będzie w stanie stwierdzić, co robi program.

Przed zapisaniem nazwy kompilator oczekuje, że będzie ona zgodna z krótkim zestawem reguł.

Zasady nazewnictwa podprogramów i funkcji

Aby korzystać z podprogramów i funkcji, należy przestrzegać zestawu zasad.

  • Nazwa podprogramu lub funkcji wywołania VBA nie może zawierać spacji
  • Nazwa podrzędna wywołania Excel VBA lub nazwa funkcji powinna zaczynać się od litery lub znaku podkreślenia. Nie może zaczynać się od cyfry ani znaku specjalnego
  • Nazwa podprogramu lub funkcji nie może być słowem kluczowym. Słowo kluczowe to słowo, które ma specjalne znaczenie w VBA. Słowa takie jak Private, Sub, Function i End itp. są przykładami słów kluczowych. Kompilator używa ich do określonych zadań.

Po wybraniu prawidłowej nazwy deklaracja sama w sobie podlega ustalonemu wzorowi.

Składnia podprogramu VBA

Aby skorzystać z tego przykładu, musisz włączyć kartę Deweloper w programie Excel. Jeśli nie wiesz, jak włączyć kartę Deweloper, przeczytaj samouczek dalej Kontrolki VBA w programie Excel

TUTAJ w składni,

Private Sub mySubRoutine(ByVal arg1 As String, ByVal arg2 As String)
    'do something
End Sub

Wyjaśnienie składni

Code Działania
  • „Prywatna subskrypcja mySubRoutine(…)”
  • Tutaj słowo kluczowe „Sub” służy do zadeklarowania podprogramu o nazwie „mySubRoutine” i uruchomienia treści podprogramu.
  • Słowo kluczowe Private służy do określenia zakresu podprogramu
  • „ByVal arg1 jako ciąg znaków, ByVal arg2 jako ciąg znaków”:
  • Deklaruje dwa parametry typu danych łańcuchowych o nazwach arg1 i arg2
  • "Napis końcowy"
  • „End Sub” służy do zakończenia treści podprogramu

Poniższa podprocedura przyjmuje imię i nazwisko i wyświetla je w oknie komunikatu.

Teraz zaprogramujemy i wykonamy tę podprocedurę. Zobaczmy to.

Jak wywołać Sub w VBA

Poniżej znajduje się krok po kroku proces wywoływania Sub w VBA:

  1. Zaprojektuj interfejs użytkownika i ustaw właściwości kontrolek użytkownika.
  2. Dodaj podprogram
  3. Zapisz kod zdarzenia kliknięcia dla przycisku polecenia wywołującego podprogram
  4. Przetestuj aplikację

Krok 1) Interfejs użytkownika

Zaprojektuj interfejs użytkownika, jak pokazano na obrazku poniżej.

Jak wywołać Sub w VBA

Ustaw następujące właściwości. Właściwości, które ustawiamy:

S / N Control: Właściwość Wartość:
1 Przycisk Polecenia1 Imię i nazwisko btnDisplayFullName
2 Podpis Pełna nazwa Podprogram

Twój interfejs powinien teraz wyglądać następująco.

Jak wywołać Sub w VBA

Krok 2) Dodaj podprogram

  1. Naciśnij Alt + F11, aby otworzyć okno kodu
  2. Dodaj następującą podprocedurę
Private Sub displayFullName(ByVal firstName As String, ByVal lastName As String)
    MsgBox firstName & " " & lastName
End Sub

TUTAJ w kodzie,

Code Akcje
  • „Prywatny wyświetlacz dodatkowyFullName(…)”
  • Deklaruje prywatną podprocedurę displayFullName, która akceptuje dwa parametry łańcuchowe.
  • „ByVal imię jako ciąg znaków, ByVal nazwisko jako ciąg znaków”
  • Deklaruje dwie zmienne parametryczne: firstName i lastName
  • msgBox imię Nazwisko"
  • Wzywa MsgBox wbudowana funkcja do wyświetlania okna wiadomości. Następnie przekazuje zmienne 'firstName' i 'lastName' jako parametry.
  • Znak ampersand „&” służy do łączenia dwóch zmiennych i dodawania między nimi pustej spacji.

Krok 3) Wywołanie podprogramu

Wywołanie podprogramu ze zdarzenia kliknięcia przycisku polecenia.

  • Kliknij prawym przyciskiem myszy przycisk polecenia, jak pokazano na poniższym obrazku. Wybierz opcję „Widok”. Code.
  • Otworzy się edytor kodu

Jak wywołać Sub w VBA

Dodaj następujący kod w edytorze kodu dla zdarzenia kliknięcia przycisku polecenia btnDisplayFullName.

Private Sub btnDisplayFullName_Click()
    displayFullName "John", "Doe"
End Sub

Twoje okno kodu powinno teraz wyglądać następująco

Jak wywołać Sub w VBA

Zapisz zmiany i zamknij okno kodu.

Krok 4) Testowanie kodu

Na pasku narzędzi programisty wyłącz tryb projektowania. Jak pokazano niżej.

Jak wywołać Sub w VBA

Krok 5) Kliknij przycisk polecenia „Podprogram o pełnej nazwie”.

Otrzymasz następujące wyniki

Jak wywołać Sub w VBA

Pobierz powyższy plik Excel Code

Przycisk jest wygodny, ale nie jest to jedyny sposób uruchomienia podprogramu i w trakcie programowania rzadko jest to najszybszy sposób.

Jak uruchomić podprogram bez przycisku

Podczas pisania kodu dodanie kontrolki do arkusza tylko po to, by przetestować podprocedurę, to strata czasu. VBA oferuje cztery inne sposoby uruchomienia takiej kontrolki, a każdy z nich pasuje do innego momentu cyklu programowania.

  • Naciśnij F5 w edytorze: Umieść kursor w dowolnym miejscu w Sub i naciśnij F5. Zostanie on uruchomiony natychmiast. Działa to tylko wtedy, gdy Sub nie przyjmuje żadnych argumentów, ponieważ VBA nie ma żadnych wartości do podania.
  • Przejdź dalej za pomocą F8: Ten sam przebieg, linia po linii, dzięki czemu możesz obserwować zmiany każdej zmiennej w oknie zmiennych lokalnych. Użyj go, gdy wynik jest błędny i chcesz sprawdzić, gdzie go szukać.
  • Użyj okna dialogowego Makra: Na karcie Deweloper kliknij Makra, wybierz nazwę i kliknij Uruchom. Na tej liście pojawiają się tylko publiczne subskrypcje bez argumentów, dlatego subskrypcja pomocnicza jest zazwyczaj deklarowana jako prywatna.
  • Nazwij to z innego Suba: Ta metoda jest używana w przypadku dowolnego Sub przyjmującego argumenty i to na niej opiera się przycisk polecenia powyżej.

Ostatnia opcja ma dwie akceptowane formy. Wpisanie nazwy i samych argumentów działa, podobnie jak jawne użycie słowa kluczowego Call, ale reguła dotycząca nawiasów jest różna w obu przypadkach.

Sub RunTheGreeting()
    ' Form 1: no Call keyword, no brackets
    displayFullName "John", "Doe"

    ' Form 2: Call keyword, brackets required
    Call displayFullName("Jane", "Roe")
End Sub

Obie linijki robią dokładnie to samo. Mieszanie obu form poprzez pisanie nawiasów bez słowa kluczowego Call jest najczęstszą przyczyną błędu kompilacji „Expected: =”, gdy Sub przyjmuje więcej niż jeden argument.

Różnica między funkcją podrzędną a funkcją w języku VBA

Sub i Function to dwa typy procedur w VBA, a początkujący często wybierają niewłaściwą. Decydujące pytanie jest proste: czy kod wywołujący potrzebuje wartości zwrotnej?

Cecha Podłoże Funkcjonować
Zwraca wartość Nie Tak, przypisano do nazwy funkcji
Zadeklarowano z Sub … Koniec Sub Funkcja … Koniec funkcji
Nazywany jako Oświadczenie w osobnym zdaniu Część wyrażenia, na przykład x = myFunc(2)
Można używać w komórce arkusza kalkulacyjnego Nie Tak, jako funkcja zdefiniowana przez użytkownika
Typowe zastosowanie Sformatuj arkusz, wyczyść dane wejściowe, wyświetl wiadomość Oblicz sumę, przekonwertuj wartość, wyszukaj dane

Użyj Sub, gdy kod działa na skoroszycie, a Funkcja VBA gdy kod generuje odpowiedź, którą coś innego przetwarza.

FAQ

Prywatny moduł podrzędny można wywołać tylko z modułu, który go deklaruje. Moduł podrzędny publiczny jest widoczny dla każdego modułu w projekcie i jest jedynym, który pojawia się w oknie dialogowym Makra.

ByVal przekazuje kopię, więc podprogram nie może zmienić zmiennej wywołującego. ByRef przekazuje samą zmienną, więc każda zmiana jest widoczna dla wywołującego. ByRef jest wartością domyślną, gdy żadne ze słów kluczowych nie jest zapisane.

Użyj instrukcji Exit Sub. Zatrzymuje ona procedurę w tym momencie i zwraca sterowanie do osoby, która ją wywołała, co jest przydatne w przypadku wcześniejszego zakończenia procedury, gdy test walidacyjny zakończy się niepowodzeniem.

Tak. Wklej makro, a asystent AI zgrupuje powiązane wiersze, zasugeruje opisową nazwę dla każdego nowego Sub i przepisze oryginał jako krótką sekwencję wywołań. Przetestuj wynik na kopii skoroszytu.

Tak. Podaj tekst błędu i numer linii wywoławczej, a asystent AI zidentyfikuje przyczyny, takie jak użycie nawiasów bez słowa kluczowego Call, nieprawidłową liczbę argumentów lub niezgodny typ danych, a następnie poda poprawioną linię.

Podsumuj ten post następująco: