sábado, 2 de abril de 2022

Listar y mostrar registros con Módulo de clase y el método Collection

    Hola amigos, es un placer estar de nuevo con ustedes, estoy feliz por compartirles un artículo muy interesante, y que es como listar múltiples registros. En nuestros proyectos es común realizar la inserción, listado y edición de varios datos, algo así como muchos registros almacenados en un arreglo, pero en este caso su almacenamiento se llevará a cabo mediante lo que se conoce como colección de datos. La colección de datos es posible mediante el método Collection, y que estarán disponibles para hacer uso de ellos en cualquier bloque de la aplicación o sistema. 

Ejemplo el usuario necesita listar y guardar en una colección los datos de clientes como: no, nombre, dirección, colonia, municipio, estado, código postal, y teléfono. Una vez guardados en la colección, deberán ser mostrados al usuario mediante una función o método y deberán ser copiados de la Hoja1 a la Hoja2.

    Los pasos a seguir son los siguientes:

1.- Crear Hoja1 como se muestra.

Hoja 1 con datos

2.- Crear Hoja2 como se muestra.

Hoja 2 sin datos

3.- Insertar un Módulo1.
4.- Insertar un Módulo de clase. En la propiedad (name) escribimos: clsClientes.

Inserción de Módulo 1 y Módulo de clase

5.- En el módulo de clase clsClientes escribimos, es siguiente código:

Public no as Integer
Public nombre as String
Public direccion as String
Public colonia as String
Public municipio as String
Public estado as String
Public codigopostal as String
Public telefono as String

6.- En el módulo 1 escribimos el siguiente código:

Option Explicit
Sub Colecciones()
Dim Coll As New Collection
Dim Rango As Range
Set Rango = Hoja1.Range("A1").CurrentRegion
Dim i As Long, Clientes As clsClientes
For i = 2 To Rango.Rows.Count
    Set Clientes = New clsClientes
    Clientes.no = Rango.Cells(i, 1).Value
    Clientes.nombre = Rango.Cells(i, 2).Value
    Clientes.direccion = Rango.Cells(i, 3).Value
    Clientes.colonia = Rango.Cells(i, 4).Value
    Clientes.municipio = Rango.Cells(i, 5).Value
    Clientes.estado = Rango.Cells(i, 6).Value
    Clientes.codigopostal = Rango.Cells(i, 7).Value
    Clientes.telefono = Rango.Cells(i, 8).Value
    'Agrega lista de clientes
    Coll.Add Clientes
Next i
Dim lista As clsClientes
'Copiamos la lista de la hoja 1 a la hoja 2
For i = 1 To Coll.Count
    Set lista = Coll(i)
    Hoja2.Cells(i + 1, "A").Value = lista.no
    Hoja2.Cells(i + 1, "B").Value = lista.nombre
    Hoja2.Cells(i + 1, "C").Value = lista.direccion
    Hoja2.Cells(i + 1, "D").Value = lista.colonia
    Hoja2.Cells(i + 1, "E").Value = lista.municipio
    Hoja2.Cells(i + 1, "F").Value = lista.estado
    Hoja2.Cells(i + 1, "G").Value = lista.codigopostal
    Hoja2.Cells(i + 1, "H").Value = lista.telefono
Next i
End Sub

7.- Nos posicionamos en el método Sub Colecciones().
8.- Ejecutar macro mediante F5.

Listado y envió de registros de la Hoja 1 a la Hoja 2

    Si todo marcha bien obtendremos como resultado que los datos de la hoja 1 fueron listados y guardados en una colección, para después enviarlos a la hoja2.

    Aquí hay algo importante que decir, que por medio un ciclo for simple y sin el Módulo de clase y el método Collection se puede realizar lo mismo y es válido.

    El código sería el siguiente:

Sub CopiarDatos()
Dim filas As Integer
Dim i As Integer
'Obtenemos el número de registros de la hoja 1
filas = Hoja1.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To filas
    Hoja2.Cells(i, 1) = Hoja1.Cells(i, 1)
    Hoja2.Cells(i, 2) = Hoja1.Cells(i, 2)
    Hoja2.Cells(i, 3) = Hoja1.Cells(i, 3)
    Hoja2.Cells(i, 4) = Hoja1.Cells(i, 4)
    Hoja2.Cells(i, 5) = Hoja1.Cells(i, 5)
    Hoja2.Cells(i, 6) = Hoja1.Cells(i, 6)
    Hoja2.Cells(i, 7) = Hoja1.Cells(i, 7)
    Hoja2.Cells(i, 8) = Hoja1.Cells(i, 8)
Next i
End Sub

    Como ven el resultado es el mismo, pero atentos, ese código solo funciona en ese bloque del sistema. Mientras que mediante el uso del método Collection y el Módulo de clase la información siempre estará disponible para cualquier bloque o módulos del sistema cuando se requiera.

No hay comentarios.:

Publicar un comentario