VBA ByVal - Como usar o argumento da função ByVal? (Exemplos)

Argumento da função Excel VBA ByVal

ByVal é uma declaração em VBA. ByVal significa By Value, isto é, quando o subprocedimento chamado a partir do procedimento, o valor das variáveis ​​é redefinido para o novo valor do novo procedimento chamado.

No VBA, quando trabalhamos com funções que são chamadas em funções diferentes, há certas circunstâncias em que o valor do argumento original é alterado quando a função está sendo chamada; a instrução byval proíbe o procedimento ou o código alterando o valor do argumento.

Eu sei que não é fácil de entender lendo a explicação, mas com exemplos práticos de função, podemos realmente entender melhor.

Como usar o argumento ByVal no VBA?

Exemplo 1

Por exemplo, observe os códigos VBA abaixo.

Código:

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

Nos dois procedimentos macro acima, temos uma variável comum “k” entre os procedimentos. Deixe-me explicar isso em detalhes antes de ver o resultado.

Na primeira macro, atribuímos o valor de 50 à variável “k.”

Dim k como inteiro k = 50

Em seguida, chamamos o segundo procedimento de macro da primeira macro.

Macro2 k

Na Macro2, redefinimos o valor da variável para k = k + 5. Nesta macro, usamos o argumento ByVal para atribuir o valor à variável “k”.

Agora, para entender “ByVal”, vamos executar o código VBA linha por linha pressionando a tecla F8.

# 1 - Ao pressionar a tecla F8 primeiro, irá destacar a primeira linha do Macro1.

Neste momento, coloque um cursor na variável “k” e ele deve mostrar o valor da variável “k”.

No momento, o valor de “k” é zero.

# 2 - Pressione a tecla F8 mais uma vez e irá pular para a terceira linha.

Mesmo agora, o valor de “k” ainda é zero.

# 3 - Pressione a tecla F8 agora e veja o valor de k.

Uma vez que o valor “k” é definido como 50 e o código é executado, o valor é mostrado como 50.

# 4 - Agora, a linha destacada é “Macro2 k,” ou seja, pressionando a tecla F8, ele irá pular para o segundo procedimento, Macro2.

# 5 - Mesmo agora, o valor da variável "k" neste procedimento também mostra como 50. Mas dentro desta macro, estamos redefinindo o valor da variável "k" como k = k + 5 ou seja, 55. Agora pressione o botão Tecla F8 mais duas vezes.

Como você pode ver acima, o valor de “k” é 55 agora.

# 6 - Pressione a tecla F8, e ele voltará para o procedimento Macro1.

Quando a macro voltou ao procedimento original Macro1, o valor da nossa variável “k” não é mais 55, em vez do valor original neste procedimento, ou seja, 50.

Quando você pressiona a tecla F8, podemos ver apenas 50 na caixa de mensagem do VBA.

Assim, como dissemos no início do artigo, o argumento “ByVal” não carrega valores de um procedimento para outro, embora carregue o valor da variável da primeira macro para a segunda no momento em que encontra a linha “ ByVal ”quando volta à macro original, ele redefine o valor para o valor original apenas no procedimento.

Exemplo # 2

Agora dê uma olhada nas duas macros abaixo.

Código:

Sub P1 () Dim k As Integer: k = 10 Chamar P2 (k) MsgBox k End Sub
Sub P2 (ByVal k As Integer) k = 15 End Sub
  • Isso é semelhante ao primeiro exemplo. Na macro “P1” , atribuímos o valor de 10 à variável “k” e na mesma macro “P1” , chamamos a segunda macro de “P2” com a variável “k”.
  • Na segunda macro “P2,” usamos o argumento ByVal e, desta vez, o valor da variável “k” é 15.

Esta macro carrega o valor da variável “k” como dez da macro “P1” para a macro “P2,” e nesta macro, o valor será redefinido para 15, mas no momento em que ele volta para terminar a macro para a primeira macro “P1” o valor de “k” de volta a 10, não 15.

Coisas para lembrar

O argumento ByVal não afeta o valor da variável mesmo depois de executar a macro, mas com o argumento By Ref, podemos transportar o valor da variável de uma macro para outra.

Artigos interessantes...