Además de la respuesta de RolandTumble a la respuesta de Cody Gray, ambas respuestas, esta es otra forma muy simple y flexible, cuando se conocen todos los contenidos de la matriz en el momento de la codificación, p. solo quiere construir una matriz que contenga 1, 10, 20 y 50. Esto también usa declaración de variantes, pero no usa ReDim. Al igual que en la respuesta de Roland, el recuento enumerado del número de elementos de la matriz no necesita ser específicamente conocido, pero se puede obtener mediante el uso de uBound.
sub Demo_array()
Dim MyArray as Variant, MyArray2 as Variant, i as Long
MyArray = Array(1, 10, 20, 50) 'The key - the powerful Array() statement
MyArray2 = Array("Apple", "Pear", "Orange") 'strings work too
For i = 0 to UBound(MyArray)
Debug.Print i, MyArray(i)
Next i
For i = 0 to UBound(MyArray2)
Debug.Print i, MyArray2(i)
Next i
End Sub
Me encanta esto más que cualquiera de las otras formas de crear arreglos. Lo mejor es que puedes agregar o quitar miembros de la matriz en la instrucción Array, y no se necesita hacer nada más con el código. Para agregar huevo a su gama de alimentos de 3 elementos, sólo tiene que teclear
, "huevo"
en el lugar adecuado, y ya está. Su matriz de alimentos ahora tiene los 4 elementos, y nada tuvo que modificarse en Dim, y ReDim se omite por completo.
Si no se desea una matriz basada en 0, es decir, usando MyArray (0), una solución es simplemente poner un 0 o "" para ese primer elemento.
Nota, esto podría ser mal visto por algunos puristas de la codificación; Una buena objeción sería que los "datos duros" deberían estar en las declaraciones de Const, no en las declaraciones de los códigos en las rutinas. Otra cuestión podría ser que, si insertas 36 elementos en una matriz, deberías establecer un const a 36, en lugar de codificar ignorando eso. La última objeción es discutible, porque impone un requisito para mantener el Const con 36 en lugar de depender de uBound. Si agrega un 37º elemento pero deja el Const en 36, es posible que haya problemas.
El número entre paréntesis es 'UBound()' de la matriz superior al enlace en lugar del tamaño. Si Option Base 0 (que es el valor predeterminado), estos valores están fuera por 1. – Caltor