Visual Basic para Aplicaciones - Arrays en VBA

Life is soft - evento anual de software empresarial
 
Vista:

Arrays en VBA

Publicado por Yodisterio (1 intervención) el 06/04/2019 20:13:34
Buenas tardes,

Es mi primer post por lo que agradezco de antemano la ayuda de todos!!

No era muy amigo de trabajar con arrays en Vba porque a diferencia de otros lenguajes de programación, no les tenía cogido el tranquillo. Estoy reconvirtiendo el código de varias macros que uso diariamente en mi trabajo y me han hablado de que hay una forma de generar una variable tipo array, de forma pública (fuera de todo procedimiento o función, es decir a nivel módulo o proyecto) y cargar ese array con los datos que se desee, con la facilidad de no tener que volver a cargar el array y así llamarlo en cualquier momento desde cualquier procedimiento.

Es decir, necesito que al abrir Excel, yo pulse un botón y se carguen en memoria en esos arrays predefinidos en mi módulo una serie de datos que en cualquier momento si los necesito (en verdad solo los necesitaría en modo lectura, ni siquiera tendría que actualizarlos) los rescate sin necesidad de volver a cargarlos.

No sé si me explico, porque por mas que lo leo creo que me explico bastante mal :) por lo que pongo un miniejemplo:

public miarray () as variant

sub CargarArray()
miarray(0) = X
miarray(1) = Y

End sub

sub miProcedimientoX()
'desde aqui mostrar cualquier dato del array, que previamente he querido cargar
'como es lógico, de la forma en la que acabo de ponerlo, arroja error, por lo que necesitaría saber de que forma debería cargar ese array en memoria, para que luego desde cuaquier sub o function pueda llamarlo.
end sub


Gracias!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de gilman
Val: 138
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Arrays en VBA

Publicado por gilman (47 intervenciones) el 07/04/2019 08:49:10
Con la declaración de la variable
1
public miarray () as variant
de array lo único que se realiza es crear espacio para la información sobre el array, pero no se reserva espacio para los diferentes elementos, si como parece, el array no va a cambiar de tamaño lo mejor es que lo especifiques en la declaración
1
2
3
4
5
6
7
Public miarray(1) As Variant
 
Sub CargarArray()
    miarray(0) = "X"
    miarray(1) = "Y"
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Samuel
Val: 84
Ha aumentado 1 puesto en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Arrays en VBA

Publicado por Samuel (27 intervenciones) el 07/04/2019 17:23:52
Hola, puedes hacerlo de varias maneras lo que nos explicas.

Ejemplo 1:
1
2
3
4
5
Public valArrar() As Variant
Public varArrar(100)
Public varArrar(100, 2)
Public varArrar(1 To 100)
Public varArrar(1 To 100, 10)

Ejemplo 2:
1
2
3
4
5
Sub CargarArray()
    'Si en la declaración de la variable no se ha definido sus elementos, se tiene que usar la instrucción Redim para redefinir los elementos
    'del array
    Redim varArray(100)
End Sub

Puedes hacer tu Array dimensional tan grande como lo necesites, sin embargo te recomiendo que envés de usar un array uses mejor una clase y que cada elemento del array se convierta en una propiedad de la clase.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Norberto
Val: 115
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Arrays en VBA

Publicado por Norberto (34 intervenciones) el 09/04/2019 14:51:26
Hola.

Lo primero darte la razón: te explicas bastante mal .

Si lo que quieres es definir un array que esté disponible para todo procedimiento dentro de tu libro debes de insertar un módulo (mdlDefiniciones) y en él lo declaras:

Captura

La carga de los datos puedes hacerla en el procedimiento WorkBook_Open() tal que así:

Captura

Y puedes usarlas en cualquier otro sitio.

Captura

Un saludo,

Norberto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar