redim llenar inicializar example dinamico array arrays vba

arrays - llenar - vb6 array



Dimensionar dinĂ¡micamente una matriz VBA? (4)

¿Por qué no puedo establecer el tamaño de una matriz según una variable? ¿Cuál es la mejor manera de evitar esto?

Dim NumberOfZombies as integer NumberOfZombies = 20000 Dim Zombies(NumberOfZombies) as New Zombie


Debe utilizar la instrucción ReDim para dimensionar dinámicamente las matrices.

Public Sub Test() Dim NumberOfZombies As Integer NumberOfZombies = 20000 Dim Zombies() As New Zombie ReDim Zombies(NumberOfZombies) End Sub

Esto puede parecer extraño cuando ya sabes el tamaño de tu matriz, ¡pero ahí tienes!


Necesitas usar una constante.

CONST NumberOfZombies = 20000 Dim Zombies(NumberOfZombies) As Zombies

o si quieres usar una variable tienes que hacerlo de esta manera:

Dim NumberOfZombies As Integer NumberOfZombies = 20000 Dim Zombies() As Zombies ReDim Zombies(NumberOfZombies)


Puede usar una matriz dinámica cuando no conoce la cantidad de valores que contendrá hasta el tiempo de ejecución:

Dim Zombies() As Integer ReDim Zombies(NumberOfZombies)

O podría hacer todo con una declaración si está creando una matriz que es local para un procedimiento:

ReDim Zombies(NumberOfZombies) As Integer

Las matrices de tamaño fijo requieren que se conozca la cantidad de elementos contenidos en el momento de la compilación. Esta es la razón por la que no puede usar una variable para establecer el tamaño de la matriz: por definición, los valores de una variable son variables y solo se conocen en tiempo de ejecución.

Podría usar una constante si sabía que el valor de la variable no iba a cambiar:

Const NumberOfZombies = 2000

pero no hay manera de hacer un reparto entre constantes y variables. Tienen significados claramente diferentes.


También puedes mirar usando el Objeto de Colección. Esto generalmente funciona mejor que una matriz para objetos personalizados, ya que dimensiona dinámicamente y tiene métodos para:

  • Añadir
  • Contar
  • retirar
  • Artículo (índice)

Además, normalmente es más fácil recorrer una colección también, ya que puede usar para ... cada estructura muy fácilmente con una colección.