VBA ByRef

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?

Você pode baixar este modelo VBA ByRef Excel aqui - modelo VBA ByRef Excel

Exemplo 1

Para obter um exemplo, veja o código VBA abaixo.

Código 1:

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

Uma vez que atribuímos o valor como 50, ele está mostrando o valor como 50. Agora ele destacou a linha Procedimento2 k, 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 para voltar ao subprocedimento anterior. Se você notar que no segundo procedimento, apliquei a fórmula como k = k + 10. ou seja, o valor de “k” é 50, 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“ então, ele carregou 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. Então 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.