VBA ByVal - Jak używać argumentu funkcji ByVal? (Przykłady)

Argument funkcji ByVal VBA programu Excel

ByVal to instrukcja w języku VBA. ByVal oznacza By Value, tzn. Gdy podprocedura wywołana z procedury jest resetowana do nowej wartości z nowej wywołanej procedury.

W VBA, gdy pracujemy z funkcjami wywoływanymi w różnych funkcjach, istnieją pewne okoliczności, w których wartość oryginalnego argumentu jest zmieniana, gdy funkcja jest wywoływana; instrukcja byval zabrania procedury lub kodu zmieniającego wartość argumentu.

Wiem, że nie jest to łatwe do zrozumienia, czytając wyjaśnienie, ale dzięki praktycznym przykładom funkcji możemy lepiej zrozumieć.

Jak korzystać z argumentu ByVal w VBA?

Przykład 1

Na przykład spójrz na poniższe kody VBA.

Kod:

Sub Macro1 () Dim k As Integer k = 50 Macro2 k MsgBox k End Sub
Sub Macro2 (ByVal k As Integer) k = k + 5 End Sub

W powyższych dwóch makroprocedurach mamy wspólną zmienną „k” między procedurami. Pozwólcie, że wyjaśnię to szczegółowo, zanim zobaczymy wynik.

W pierwszym makrze przypisaliśmy wartość 50 zmiennej „k”.

Dim k As Integer k = 50

Następnie nazwaliśmy drugą procedurę makra z pierwszego makra.

Makro2 k

W Macro2 zresetowaliśmy wartość zmiennej do k = k + 5. W tym makrze użyliśmy argumentu ByVal, aby przypisać wartość zmiennej „k”.

Teraz, aby zrozumieć „ByVal”, uruchommy kod VBA wiersz po wierszu, naciskając klawisz F8.

# 1 - Po naciśnięciu klawisza F8 najpierw podświetli on pierwszą linię Macro1.

W tym momencie umieść kursor na zmiennej „k”, która powinna pokazać wartość zmiennej „k”.

W tej chwili wartość „k” wynosi zero.

# 2 - Naciśnij klawisz F8 jeszcze raz, aby przejść do trzeciej linii.

Nawet teraz wartość „k” wciąż wynosi zero.

# 3 - Naciśnij teraz klawisz F8 i zobacz wartość k.

Ponieważ wartość „k” jest ustawiona na 50 i kod jest wykonywany, a więc wartość wyświetlana jako 50.

# 4 - Teraz podświetlona linia to „Macro2 k”, tzn. Po naciśnięciu klawisza F8 nastąpi przejście do drugiej procedury, Macro2.

# 5 - Nawet teraz wartość zmiennej „k” w tej procedurze również jest wyświetlana jako 50. Ale wewnątrz tego makra resetujemy wartość zmiennej „k” na k = k + 5, czyli 55. Teraz naciśnij Klawisz F8 jeszcze dwa razy.

Jak widać powyżej, wartość „k” wynosi teraz 55.

# 6 - Naciśnij klawisz F8, aby przejść z powrotem do procedury Macro1.

Kiedy makro wskoczyło z powrotem do pierwotnej procedury Makro1, wartość naszej zmiennej „k” nie jest już 55, a raczej oryginalną wartością w tej procedurze, tj. 50.

Po naciśnięciu klawisza F8 w oknie komunikatu w VBA widzimy tylko 50.

Tak więc, jak powiedzieliśmy na początku artykułu, argument „ByVal” nie przenosi wartości z jednej procedury do drugiej, mimo że przenosi wartość zmiennej z pierwszego makra do drugiego w momencie napotkania wiersza „ ByVal ”po powrocie do oryginalnego makra resetuje wartość do oryginalnej wartości tylko w procedurze.

Przykład nr 2

Teraz spójrz na poniższe dwa makra.

Kod:

Sub P1 () Dim k As Integer: k = 10 Call P2 (k) MsgBox k End Sub
Sub P2 (ByVal k As Integer) k = 15 End Sub
  • Jest to podobne do pierwszego przykładu. W makrze „P1” przypisaliśmy wartość 10 zmiennej „k”, aw tym samym makrze „P1” nazwaliśmy drugie makro „P2” ze zmienną „k”.
  • W drugim makrze „P2” użyliśmy argumentu ByVal i tym razem wartość zmiennej „k” wynosi 15.

To makro przenosi wartość zmiennej „k” jako dziesięć z makra „P1” do makra „P2”, aw tym makrze wartość zostanie zresetowana do 15, ale w momencie, gdy wróci do zakończenia makra do pierwszego makra „P1” wartość „k” z powrotem do 10, a nie 15.

Rzeczy do zapamiętania

Argument ByVal nie wpływa na wartość zmiennej nawet po uruchomieniu makra, ale za pomocą argumentu By Ref możemy przenosić wartość zmiennej z jednego makra do drugiego.

Interesujące artykuły...