VBA – Matriz dinâmica (Redim e Redim Preserve)
In this Article
Este tutorial demonstrará como usar matrizes dinâmicas (redim e redim preserve) no VBA.
Matriz Dinâmica
As Matrizes Dinâmicas são matrizes que podem mudar de tamanho (ao contrário das matrizes estáticas, que são estáticas).
Para declarar uma matriz dinâmica, você declara a matriz, mas omite o tamanho da matriz:
Dim strNomes() As String
Então, antes de atribuir valores à matriz, você deve usar a instrução ReDim para definir a matriz com o tamanho desejado:
ReDim strNomes(1 to 3)
Agora, sempre que quiser alterar o tamanho da matriz, basta usar ReDim (ou ReDim Preserve, como veremos a seguir).
Matrizes Dinâmicas Tipo Variant
Observação: As Matrizes Variant são um pouco diferentes. Com as matrizes variant, você não precisa definir o tamanho da matriz com ReDim antes de atribuir valores.
Sub TesteArray()
'declarar a variável
Dim varNomes() As Variant
'preencher a matriz
varNomes() = Array("Fred", "Wilma", "Barney", "Betty")
'retornar os valores
MsgBox Join(varNomes, ",")
End Sub
Redim vs. Redim Preserve
A instrução ReDim redimensiona uma array, limpando todos os valores existentes.
A instrução ReDim Preserve redimensiona uma array, mantendo (“preservando”) todos os valores existentes.
Uso do ReDim
Na prática, o redimensionamento de uma matriz com o ReDim tem a seguinte aparência:
Sub TesteReDim()
'Declarar a Array como String
Dim strNomes() As String
'Redimensionar a Array de String para comportar 3 valores
ReDim strNomes(1 to 3)
'preencher a array com 3 nomes
strNomes(1) = "Mel"
strNomes(2) = "Steve"
strNomes(3) = "Bob"
'exibir os resultados na janela de verificação imediata
Debug.Print Join(strNomes, vbCrLf)
End Sub
Usando ReDim Preserve
Neste exemplo, usaremos ReDim para definir a matriz dinâmica inicial e, em seguida, ReDim Preserve para redimensionar a matriz, mantendo os valores originais:
Sub TesteReDim()
'Declarar a Array como String
Dim strNomes() As String
'Redimensionar a Array de String para comportar 3 valores
ReDim strNomes(1 to 3)
'preencher a array
strNomes(1) = "Mel"
strNomes(2) = "Steve"
strNomes(3) = "Bob"
'exibir os resultados na janela de verificação imediata
Debug.Print Join(strNomes, vbCrLf)
'redimensionar mas preservando os valores
ReDim Preserve strNomes(1 to 4)
strNomes(4) = "Fred"
'exibir os resultados na janela de verificação imediata
Debug.Print Join(strNomes, vbCrLf)
End Sub
Se você não usar a instrução PRESERVE, perderá os dados que estavam na matriz anteriormente.
Na janela imediata acima, a array é preenchia com Mel, Steve e Bob. Quando foi declarada novamente, ela removeu esses valores e, em vez disso, retornou 3 valores em branco e, em seguida, o valor ‘Fred’. Isso se deve ao fato de a instrução PRESERVE ter sido omitida.