VBA ByRef - Przekaż argument za pomocą funkcji ByRef VBA programu Excel

Argument funkcji ByRef VBA programu Excel

ByRef w VBA to funkcja nazywana jako referencja, w której podajemy odniesienie do dowolnych argumentów w naszym kodzie, kiedy tworzymy niestandardowe funkcje i chcemy użyć wartości dowolnej zmiennej, która jest zdefiniowana wcześniej przed funkcją, którą używamy funkcji ByRef, składnia do użycia jest prosta jak nazwa funkcji funkcji (zmienna ByRef jako typ danych).

Używając Byref, możemy wskazać oryginalną wartość zmiennej bez zmiany wartości zmiennej. Jest to podobne do przekazywania wartości zmiennej bezpośrednio do podprocedury VBA lub funkcji VBA.

Jak przekazać argument za pomocą argumentu ByRef VBA?

Przykład 1

Na przykład spójrz na poniższy kod VBA.

Kod1:

Sub Procedura1 () Dim k As Integer k = 50 Procedura2 k MsgBox k End Sub

Kod2:

Sub Procedura2 (ByRef k As Integer) k = k + 10 End Sub

W pierwszej procedurze zadeklarowałem zmienną „k” jako liczbę całkowitą.

Następnie przypisałem wartość tej zmiennej jako 50.

Następnie dodałem nową linię tj

Procedura 2 k

To jest druga nazwa procedury. W tej procedurze zadeklarowałem zmienną w nawiasach jako ciąg w języku VBA, ale użyłem słowa „ByRef”.

ByRef k As Integer

Tutaj przypisałem wartość zmiennej „k” jako

k = k + 10

Ok, teraz uruchomię kod krok po kroku naciskając klawisz F8.

Naciśnij klawisz F8 jeszcze dwa razy i umieść kursor na zmiennej „k”, aby zobaczyć wartość zmiennej „k”.

Ponieważ przypisaliśmy wartość 50, pokazuje ona wartość 50. Teraz podświetliła linię Procedura2 k, która jest drugą nazwą procedury.

Jeśli naciśnę teraz klawisz F8, wyskoczy z bieżącej procedury i przejdzie do drugiej procedury.

Odkąd użyliśmy słowa ByRef, zawiera ono wartość zmiennej „k” z powyższej procedury.

Naciśnij dwukrotnie klawisz F8. Powróci do poprzedniej podprocedury. Jeśli zauważysz w drugiej procedurze, zastosowałem formułę jako k = k + 10. tj. Wartość „k” wynosi 50, a następnie dodaje 10 więcej, czyli łącznie 60.

Teraz kod jest uruchamiany w pierwszej procedurze, aw tej procedurze zmienna „k” ma wartość 50. Ale naciśnij klawisz F8 i zobacz wynik w oknie komunikatu.

Otrzymaliśmy wynik jako 60 zamiast domyślnej wartości 50 w tej procedurze.

Powód, dla którego otrzymaliśmy 60, ponieważ w drugiej procedurze zastosowaliśmy „ByRef”, więc wynik równania (k = k + 10) został przeniesiony do bieżącej procedury.

Tutaj wartość pierwszej zmiennej „k” wynosi 50, aw drugiej procedurze wartość zmiennej „k” wynosi k + 10, czyli 60, co jest przenoszone do pierwszej procedury.

W pierwszej procedurze pierwotna wartość zmiennej „k” wynosiła 50, więc By Ref zmienił pierwotną wartość z 50 na 60 wykonując równanie k = k + 10, czyli k = 50 +10 = 60.

Przykład nr 2

Spójrzmy teraz na jeszcze jeden przykład.

Kod 1:

Sub P1 () Dim MyNumber As Long MyNumber = 1 Call Change_ByRef (MyNumber) 'MyNumber jest zmieniany przez procedurę Change_ByRef MsgBox "Mój numer to teraz:" & MyNumber End Sub


Kod 2:

Sub Change_ByRef (ByRef NewNumber As Long) NewNumber = 14 End Sub

Działa dokładnie tak samo, jak poprzedni kod.

Początkowo wartość zmiennej „MyNumber” wynosi 1. Następnie wywołujemy poniższą procedurę po nazwie

Zadzwoń Change_ByRef (MyNumber)

W tej procedurze wartość zmiennej wynosi 14.

Tak więc, gdy wróci do poprzedniej procedury, przypisze nową wartość zmiennej jako 14.

Interesujące artykuły...