Sobre Arrays y Collections
Hola,
Soy novato en VBA y Excel. Tengo un libro de excel con varias hojas. En una primera hoja, existe una tabla, que cuando haces clic en un botón, genera otra tabla con una serie de datos. Por ejemplo, en esta segunda tabla habrá cientos de usuarios, cada uno en la columna "Taquilla" puede tener un número del 1 al 70, y pueden coincidir.
Lo que yo quiero hacer es guardar un array de 70 elementos, donde se contabilice el número de usuarios que tienen esa taquilla. Es decir, si hay 5 usuarios que tienen la taquilla 7, mi array en su posición 7 tendrá el número 5.
Estos datos, los debo guardar en una hoja oculta, al hacer clic en guardar. Más o menos todo ya lo tengo preparado, excepto el array o colleción que debe almacenar estos datos. Mi idea era declarar este array como Public dentro de ThisWorkBook, inicializarlo al inicio, tocarlo tras hacer clic en el botón anteriormente comentado y al guardar el libro, se guarden estos datos en una hoja oculta.
Si pongo Public array(1 To 70) As Integer, me dice Excel:
Error de Compilación: No se permiten constantes, cadenas de longitud fija, matrices e instrucciones Declare como miembros Public de módulos de objeto
Entonces, lo cambié por un Collection. Este collection lo inicializo así:
Public Sub ReinicializaPuertosUsados()
Dim i As Integer
Set taquillas = New Collection
For i = 1 To 70
Dim taquilla As String
taquilla = "Taquilla_" + Trim$(Str$(i))
Call gbl_PortsUsed.Add(0, taquilla)
Next
End Sub
En el Workbook_BeforeSave, guardo los datos (aunque antes le sumo los anteriores):
Dim i As Integer
For i = 1 To 70
If (taquillas(i)>0) Then
Dim temp As Long
rango = "Taquilla_" + Trim$(Str$(i))
temp = Application.Worksheets(HOJA_DATOS_INTERNOS).Range(rango).Value
temp = temp + taquillas(i)
Application.Worksheets(HOJA_DATOS_INTERNOS).Range(rango).Value = temp
End If
Next
Entonces, lo único que me quedaría por definir es cómo modificar la collection mientras leo las tablas. Ya tengo el bucle que lee todo lo que necesito, pero no sé cómo modificar un item de una collection. Lo intento mediante:
ThisWorkbook.taquillas(num) = ThisWorkbook.taquillas(num) + 1
No me deja. Lo intento mediante Item y tampoco.
En fin, no sé si esta es la mejor forma de hacer esto. ¿Alguna sugerencia/idea/ayuda?
Muchas gracias :)
Soy novato en VBA y Excel. Tengo un libro de excel con varias hojas. En una primera hoja, existe una tabla, que cuando haces clic en un botón, genera otra tabla con una serie de datos. Por ejemplo, en esta segunda tabla habrá cientos de usuarios, cada uno en la columna "Taquilla" puede tener un número del 1 al 70, y pueden coincidir.
Lo que yo quiero hacer es guardar un array de 70 elementos, donde se contabilice el número de usuarios que tienen esa taquilla. Es decir, si hay 5 usuarios que tienen la taquilla 7, mi array en su posición 7 tendrá el número 5.
Estos datos, los debo guardar en una hoja oculta, al hacer clic en guardar. Más o menos todo ya lo tengo preparado, excepto el array o colleción que debe almacenar estos datos. Mi idea era declarar este array como Public dentro de ThisWorkBook, inicializarlo al inicio, tocarlo tras hacer clic en el botón anteriormente comentado y al guardar el libro, se guarden estos datos en una hoja oculta.
Si pongo Public array(1 To 70) As Integer, me dice Excel:
Error de Compilación: No se permiten constantes, cadenas de longitud fija, matrices e instrucciones Declare como miembros Public de módulos de objeto
Entonces, lo cambié por un Collection. Este collection lo inicializo así:
Public Sub ReinicializaPuertosUsados()
Dim i As Integer
Set taquillas = New Collection
For i = 1 To 70
Dim taquilla As String
taquilla = "Taquilla_" + Trim$(Str$(i))
Call gbl_PortsUsed.Add(0, taquilla)
Next
End Sub
En el Workbook_BeforeSave, guardo los datos (aunque antes le sumo los anteriores):
Dim i As Integer
For i = 1 To 70
If (taquillas(i)>0) Then
Dim temp As Long
rango = "Taquilla_" + Trim$(Str$(i))
temp = Application.Worksheets(HOJA_DATOS_INTERNOS).Range(rango).Value
temp = temp + taquillas(i)
Application.Worksheets(HOJA_DATOS_INTERNOS).Range(rango).Value = temp
End If
Next
Entonces, lo único que me quedaría por definir es cómo modificar la collection mientras leo las tablas. Ya tengo el bucle que lee todo lo que necesito, pero no sé cómo modificar un item de una collection. Lo intento mediante:
ThisWorkbook.taquillas(num) = ThisWorkbook.taquillas(num) + 1
No me deja. Lo intento mediante Item y tampoco.
En fin, no sé si esta es la mejor forma de hacer esto. ¿Alguna sugerencia/idea/ayuda?
Muchas gracias :)
1 Respuesta
Respuesta de jrgces
1
