VBA ByRef

Argument funkcji ByRef programu Excel VBA

ByRef w VBA to funkcja nazywana jako referencja, w której podajemy odniesienie do dowolnych argumentów w naszym kodzie, gdy 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?

Możesz pobrać ten szablon VBA ByRef Excel tutaj - szablon VBA ByRef Excel

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 to 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.

Dwukrotne naciśnięcie klawisza F8 spowoduje powrót do poprzedniej podprocedury. Jeśli zauważysz w drugiej procedurze, zastosowałem formułę jako k = k + 10, tj. Wartość „k” wynosi 50, to dodaje 10 więcej, czyli łącznie 60.

Teraz kod jest wykonywany 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.

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

W tym przypadku 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

Teraz spójrz 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, kiedy wróci do poprzedniej procedury, przypisze nową wartość zmiennej jako 14.