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.