VBA – Tipo de Dados Variant (Dim Variavel)
In this Article
Tipo de Variável Variant
Uma variável Variant pode conter qualquer tipo de dados (cadeia de caracteres, números inteiros, decimais, objetos etc.). Se você não declarar um tipo de variável, sua variável será considerada variant.
Para declarar uma variável Variant, você usa a declaração Dim (abreviação de Dimensão):
Dim varNome as Variant
Dim rng as Variant
Em seguida, para atribuir um valor a uma variável, basta usar o sinal de igual:
varNome = "John"
rng = Sheets(1).Range("A1")
Colocar isso em um procedimento tem a seguinte aparência:
Sub strExamplo()
'declarar as variantes
Dim strNome As Variant
Dim rng As Variant
'preencher as variáveis
strNome = "Fred Smith"
Set rng = Sheets(1).Range("A1")
'preencher a planilha
rng.Value = strNome
End Sub
Se você executar o código acima, a célula A1 da Planilha 1 será preenchida com “Fred Smith”.
Pelos nomes declarados acima, poderíamos concluir que o varNome conteria texto e o objSheet conteria um objeto de planilha. Mas, na verdade, qualquer tipo de dado pode ser direcionado para a variável.
Você poderia preencher as variáveis declaradas acima da seguinte forma e nenhum erro ocorreria.
varNome = 6
objSheet - "Fred"
O uso de variáveis variant é incomum e não é considerado uma boa prática. Entretanto, em algumas ocasiões, as variáveis variant são úteis.
Declarar a Variável Variant no Módulo ou no Nível Global
No exemplo anterior, você declarou a variável Variant em um procedimento. As variáveis declaradas com um procedimento só podem ser usadas dentro desse procedimento
Em vez disso, você pode declarar variáveis Variant no nível do módulo ou global.
Nível do Módulo
As variáveis em nível de módulo são declaradas na parte superior dos módulos de código com a instrução Dim.
Essas variáveis podem ser usadas com qualquer procedimento nesse módulo de código.
Nível Global
As variáveis de nível global também são declaradas na parte superior dos módulos de código. No entanto, em vez de usar a instrução Dim, você usa a instrução Public para indicar que a variável variant está disponível para ser usada em todo o seu projeto VBA.
Public strNome as Variant
Se você declarasse a variável variante em um nível de módulo e a usasse em um módulo diferente, ocorreria um erro
Se você tivesse usado a palavra-chave Public para declarar a variável variant, o erro não ocorreria e o procedimento seria executado perfeitamente.
Uso de uma Variant para Preencher o Excel
Considere o procedimento a seguir:
Sub TestarVariavel()
'declarar uma cadeia de caracteres para armazenar o nome do produto
Dim strProduto as string
'declarar um número inteiro para armazenar a quantidade do produto
Dim iQtd as integer
'declarar números duplos para armazenar o preço do produto, e o preço total
Dim dblPreco as Double
Dim dblTotal as Double
'preencher as variáveis
strProduto = "Farinha de trigo"
iQtd = 3
dblPreco = "$5.00"
dblTotal = "$15.00"
'preencher a planilha do Excel
Range("A1") = strProduto
Range("A2") = iQtd
Range("A3") = dblPreco
Range("A4") = dblTotal
End Sub
Quando executamos esse código, ocorre o seguinte erro.
Clique em Depurar
Não é possível colocar um cifrão na variável, pois a variável é declarada como Double e, portanto, não pode armazenar valores de cadeia de caracteres.
Declare dblPreco e dblTotal como Variants, o que significa que você não está restrito a um tipo de dados.
Dim dblPreco as Variant
Dim dblTotal como Variant
Execute novamente o código e os dados aparecerão na planilha do Excel como deveriam.
Observe que os dados inseridos em A4 e A5 são automaticamente convertidos pelo Excel em números.
Declaração de uma Matriz Dinâmica
As variáveis tipo variant também são úteis quando você está declarando uma matriz dinâmica, pois permitem que o tamanho da matriz seja alterado durante o tempo de execução.
Com uma matriz variante, você não precisa definir o tamanho da matriz. O tamanho se ajustará automaticamente.
Sub MatrizVariant()
Dim arrLista() As Variant
'Definir valores
arrLista= Array(1, 2, 3, 4)
'Alterar valores
arrLista = Array(1,2,3,4,5,6)
'Posição de saída 4
MsgBox arrLista(4)
End Sub