VBA Dynamic Array (Redim e Redim Preserve)

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.

wave wave wave wave wave