Argumento da função Excel VBA ByRef
ByRef em VBA é uma função chamada como por referência, onde fornecemos uma referência a quaisquer argumentos em nosso código, quando fazemos funções personalizadas e queremos usar o valor de qualquer variável que é definida anteriormente antes da função que usamos função ByRef, a A sintaxe a ser usada é simples como Função Nome-da-Função (Variável ByRef como Tipo de Dados).
Usando Byref, podemos apontar para o valor da variável original sem alterar o valor da variável. É como passar o valor da variável diretamente para o subprocedimento VBA ou função VBA.

Como passar o argumento usando o argumento VBA ByRef?
Exemplo 1
Por exemplo, observe o código VBA abaixo.
Código1:
Sub Procedure1 () Dim k As Integer k = 50 Procedure2 k MsgBox k End Sub

Código 2:
Sub Procedure2 (ByRef k As Integer) k = k + 10 End Sub

No primeiro procedimento, declarei a variável “k” como Inteiro.
Em seguida, atribuí o valor a essa variável como 50.
Depois disso, adicionei uma nova linha, ou seja,
Procedimento 2 k
Este é o segundo nome de procedimento. Neste procedimento, declarei a variável entre parênteses como String em VBA, mas usei a palavra “ByRef”.
ByRef k As Integer
Aqui, atribuí o valor da variável "k" como
k = k + 10
Ok, agora irei executar o código passo a passo pressionando a tecla F8.


Pressione a tecla F8 mais duas vezes e coloque o cursor na variável “k” para ver o valor da variável “k”.

Como atribuímos o valor como 50, ele está mostrando o valor como 50. Agora ele destacou a linha Procedimento2k, que é o segundo nome do procedimento.
Se eu pressionar a tecla F8 agora, ele sairá do procedimento atual e passará para o segundo procedimento.

Agora, como usamos a palavra ByRef, ela carregava o valor da variável “k” do procedimento acima.

Pressione a tecla F8 duas vezes. Ele retornará ao subprocedimento anterior. Se você notar no segundo procedimento, eu apliquei a fórmula como k = k + 10. ou seja, o valor de “k” é 50 e então adiciona mais 10 a isso, ou seja, 60 no total.

Agora o código está rodando no primeiro procedimento, e neste procedimento, o valor da variável “k” é 50. Mas pressione a tecla F8 e veja o resultado em uma caixa de mensagem.

Obtivemos o resultado como 60 em vez do valor padrão de 50 neste procedimento.
A razão pela qual obtivemos 60 é que, no segundo procedimento, aplicamos “ByRef“ para que ele carregasse o resultado da equação (k = k + 10) para o procedimento atual.
Aqui, o valor da primeira variável “k” é 50 e, no segundo procedimento, o valor da variável “k” é k + 10, ou seja, 60, que é transportado para o primeiro procedimento.
No primeiro procedimento, o valor original da variável “k” era 50, então By Ref alterou o valor original de 50 para 60 executando a equação k = k + 10, ou seja, k = 50 +10 = 60.
Exemplo # 2
Agora dê uma olhada em mais um exemplo.
Código 1:
Sub P1 () Dim MyNumber As Long MyNumber = 1 Call Change_ByRef (MyNumber) 'MyNumber é alterado pelo procedimento Change_ByRef MsgBox "My Number is now:" & MyNumber End Sub
Código 2:
Sub Change_ByRef (ByRef NewNumber As Long) NewNumber = 14 End Sub

Isso funciona exatamente da mesma forma que o código anterior.
Inicialmente, o valor da variável “MyNumber” é 1. Em seguida, chamamos o procedimento abaixo pelo seu nome
Chamar Change_ByRef (MyNumber)
Nesse procedimento, o valor da variável é 14.
Assim, quando voltar ao procedimento anterior, atribuirá o novo valor à variável como 14.
