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