miércoles, 20 de septiembre de 2023

Listar y mostrar registros con la instrucción ReDim () matriz de datos

Para esta práctica lo que haremos es solicitar la información de la hoja1 y que nos los muestre en el hoja2.


Los pasos que debemos seguir son los siguientes:

1.- Crear un nuevo libro de trabajo, hoja1 con la siguiente información:

Hoja1

2.- Crear una hoja2 vacía tal y como se muestra:

Hoja2 vacía

3.- Ingresar al editor VBA Excel, Alt + F11.
4.- En el Módulo1 escribimos el siguiente código:

Sub Lista_de_arreglo()
Dim codigo() as String
Dim nombre() as String
Dim costo() as Currency
Dim precio() as Currency
Dim stock() as Currency
Dim contador As Integer
Dim Rango As Range
Set Rango = Hoja1.Range("A1").CurrentRegion
Dim i As Long
For i = 2 To Rango.Rows.Count
    contador=contador+1
    ReDim Preserve codigo(contador) As String
    ReDim Preserve nombre(contador) As String
    ReDim Preserve costo(contador) As Currency
    ReDim Preserve precio(contador) As Currency
    ReDim Preserve stock(contador) As Currency
    codigo(contador) = Rango.Cells(i, 1).Value
    nombre(contador) = Rango.Cells(i, 2).Value
    costo(contador) = Rango.Cells(i, 3).Value
    precio(contador) = Rango.Cells(i, 4).Value
    stock(contador) = Rango.Cells(i, 5).Value
Next i
'Copiamos la lista de la hoja 1 a la hoja 2
For i = 1 To contador
    Hoja2.Cells(i + 2, "A").Value = codigo(i)
    Hoja2.Cells(i + 2, "B").Value = nombre(i)
    Hoja2.Cells(i + 2, "C").Value = costo(i)
    Hoja2.Cells(i + 2, "D").Value = precio(i)
    Hoja2.Cells(i + 2, "E").Value = stock(i)
Next i
End Sub

5.- Nos posicionamos en la subrutina Sub Lista_de_Arreglo() y ejecutamos (F5).

Datos copiados de la Hoja1 a la Hoja2 con ReDim()

    Como resultado obtendremos que la lista de productos de la hoja1 fueron mostrados en la hoja2.

Esta instrucción tiene muchos usos. Supongamos que deseamos modificar las partidas de una cotización. Los pasos serian:

1.-Declarar la variable "id" como variable Public en un Módulo simple.
2.-Si los datos se encuentran almacenados en un objeto de tipo ListBox, entonces
3.-Programamos un botón Buscar. Aquí lo que sucede es que al ejecutar la búsqueda de las partidas va almacenar el "id" tanto en ListBox como en ReDim().
4.-Una vez modificado el Listbox, tener un botón programado de Modificar.

Al recorrer los "id" de ListBox, si uno de ellos es 0 entonces registrar esa partida de lo contrario si el "id" es diferente de 0 entonces modificar la fila. Lo interesante viene a continuación:

Como recordaran en memoria aun se encuentra almacenado los "id" cuando se presionó el botón buscar por lo que debe recorrer 1 x 1 y los busque dentro de ListBox, si no lo encuentra que elimine la fila de la de la hoja de datos.

For i = 1 To intcontado
    lngideparti = 0
    lngideparti = lngidparti(i)
    For intfila = 1 To Me.ListBox1.ListCount - 1
        id_detalle = 0
        id_detalle = Me.ListBox1.List(intfila, 0)
        If lngideparti = id_detalle Then
            intval = 1
            Exit For
        Else
            intval = 0
        End If
    Next intfila
    If intval = 0 Then
        Set rng1 = Hoja5.Range("A:A").Find(What:=lngideparti, LookAt:=xlWhole, LookIn:=xlValues)
        If rng1 Is Nothing Then
            MsgBox "El id no existe", vbOKOnly + vbInformation, "No encontrado"
        Else
            Hoja5.Range("J" & rng1.Row) = "CANCELADO"
        End If
    End If
Next i




No hay comentarios.:

Publicar un comentario