En el post anterior se aprendió como usar colecciones, vimos que se usaron los Módulos de Clase para definir objetos personalizados. En el ejemplo la clase Rectangulo que tiene como atributos el ancho y largo y como propiedades Area y Perimetro. En post se mostrará como crear una colección de la clase Rectángulo, la colección Rectángulos que agruparía a todos los objetos Rectangulo creados.

Al final encontrarás el archivo del caso que se describe.

Para crear la colección agregamos un nuevo módulo de clase llamado Rectangulos, agreguemos el siguiente código en este módulo luego detallaré el porque de los puntos importantes:

[code language=”vb”]
‘Colección Rectángulos, almacena los objetos Rectangulo
Private colRectangulos As New Collection
‘Añade objetos a la colección
Public Sub Add(clsRectangulo As Rectangulo)
colRectangulos.Add clsRectangulo, clsRectangulo.nombre
End Sub
‘Quita objetos de la coleccion
Public Sub Remove(Index As Integer)
colRectangulos.Remove Index
End Sub
‘Devuelve un miembro de la coleccion
Public Property Get Item(Index As Integer) As Rectangulo
Set Item = colRectangulos(Index)
End Property
‘Devuelve el numero de objetos en la colección
Public Property Get Count() As Integer
Count = colRectangulos.Count
End Property
‘Hace referencia a la coleccion
Public Property Get Items() As Collection
Set Items = colRectangulos
End Property
[/code]

En primer lugar para definir la colección se emplea la instancia ‘New Collection’ luego con el método Add indicamos que tipo de objeto se añadirá a dicha colección en este caso objeto tipo Rectangulo, dentro del método Add, aparte del objeto Rectangulo se agrega una etiqueta(string) con la que se reconoce al objeto agregado en este caso el nombre del objeto rectángulo. Los objetos que se agregan a la colección se indexan comenzando de 1.

También se ha implementado el método Remove que elimina un objeto Rectangulo dentro de la colección según el índice que se pase. Con el método Item se puede extraer un objeto Rectangulo de la colección, para ello es necesario indicar el índice del objeto que se quiere extraer. La propiedad Count devuelve el número de objetos de la colección y la propiedad Items sirve para referirse a la colección, esta propiedad o método se puede usar dentro de un bloque For Each.

Agregar el siguiente código en un módulo normal para entender el uso de una colección y sus métodos.

[code language=”vb”]
Sub readRecs()
Dim rg As Range
Dim Recs As Rectangulos
Dim oRec As Rectangulo
Dim i As Integer
Set rg = Range("B3")
Set Recs = New Rectangulos
Do Until (IsEmpty(rg))
Set oRec = New Rectangulo
oRec.nombre = rg.Value
oRec.largo = rg.Offset(0, 1).Value
oRec.ancho = rg.Offset(0, 2).Value
Recs.Add oRec
Set rg = rg.Offset(1, 0)
Set oRec = Nothing
Loop
Set rg = Range("E2")
For i = 1 To Recs.Count
rg.Offset(i, 0).Value = Recs.Item(i).Area
rg.Offset(i, 1).Value = Recs.Item(i).Perimetro
Next i
Set Recs = Nothing
End Sub
[/code]

El procedimiento readRecs lee desde la celda B3 hacia abajo, hasta encontrar una celda vacía, el ancho y largo de un objeto rectángulo que luego agrega a la colección Recs al terminar de leer todos los objetos Rectangulo, utilizando las propiedades Count e Item escribe el Area y Perimetro de cada rectángulo dentro de la colección.

Espero que haya sido claro, puedes descargar el archivo con el código aquí y probar lo que se ha explicado. Suerte.

Creando colecciones de objetos de clase

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *