Este tutorial demonstrará como usar matrizes dinâmicas (redim e redim preserve) no VBA.
Matriz Dinâmica
Matrizes Dinâmicas são matrizes que podem mudar de tamanho (ao contrário de matrizes estáticas, que são estáticos).
Para declarar uma matriz dinâmica, você declara a matriz, mas omite o tamanho da matriz:
1 | Dim strNames () As String |
Então, antes de atribuir valores à sua matriz, você deve usar a instrução ReDim para definir a matriz para o tamanho desejado:
1 | ReDim strNames (1 a 3) |
Agora, sempre que você quiser alterar o tamanho do seu array, basta usar ReDim (ou ReDim Preserve, como aprenderemos a seguir).
Matrizes de variantes dinâmicas
Observação: as matrizes variantes são um pouco diferentes. Com matrizes variantes, você não precisa definir o tamanho da matriz com ReDim antes de atribuir valores.
12345678 | Sub TestArray ()'declara a variávelDim varNames () como variante'preencher a matrizvarNames () = Array ("Fred", "Wilma", "Barney", "Betty")'devolver os valoresMsgBox Join (varNames, ",")End Sub |
Redim vs. Redim Preserve
o ReDim declaração redimensiona uma matriz, clareira todos os valores existentes.
o ReDim Preserve declaração redimensiona uma matriz, guardando (“Preservando”) todos os valores existentes.
Usando ReDim
Na prática, o redimensionamento de uma matriz com ReDim se parece com isto:
123456789101112 | Sub TestReDim ()'declara o array de stringsDim strNames () As String'redimensionar o array de strings para poder conter 3 valoresReDim strNames (1 a 3)'preencher a matriz com 3 nomesstrNames (1) = "Mel"strNames (2) = "Steve"strNames (3) = "Bob"'mostra o resultado na janela imediataDebug.Print Join (strNames, 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, guardando os valores originais:
1234567891011121314151617 | Sub TestReDim ()'declara o array de stringsDim strNames () As String'redimensiona o array de strings para poder conter 3 valoresReDim strNames (1 a 3)'preencher a matrizstrNames (1) = "Mel"strNames (2) = "Steve"strNames (3) = "Bob"'mostra o resultado na janela imediataDebug.Print Join (strNames, vbCrLf)'redim mas preseve os dadosReDim Preserve strNames (1 a 4)strNames (4) = "Fred"'mostra o resultado na janela imediataDebug.Print Join (strNames, vbCrLf)End Sub |
Se você não usar o PRESERVAR declaração, você perderia os dados que estavam na matriz anteriormente.
Na janela imediata acima, a matriz preenchia Mel, Steve e Bob. Quando foi declarado novamente, ele removeu esses valores e, em vez disso, retornou 3 valores em branco e, em seguida, o valor ‘Fred’. Isso é devido ao PRESERVAR declaração sendo omitida.