Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Formato favorito

Hola tod@s!

Al parecer, mis resultados confirman lo que siempre he sospechado: no soy de los que aprenden solo leyendo o mirando un pizarrón. Mi perfil principal es Multimodal (AK), que es una mezcla de dos estilos que me van genial.

Por un lado, soy muy Auditivo. Me doy cuenta de que las cosas se me quedan mucho mejor cuando las escucho o, mejor aún, cuando las hablo. Por eso me gusta tanto discutir un tema o explicarlo en voz alta.

Por otro lado, soy muy Kinestésico. Mi cuerpo necesita estar involucrado. Necesito moverme, hacer las cosas con mis propias manos y conectar la información con experiencias de la vida real. Si hay un ejercicio práctico, un ejemplo real o un caso de estudio, lo entiendo al instante.

Ahora sé por qué leer libros de texto sin más no me funciona. Para mí, la clave es combinar estos dos métodos: necesito escuchar y hablar sobre un tema, y al mismo tiempo, necesito hacer algo con esa información. Eso lo cambia todo.

1 respuesta

Sub GenerarReportesPorCuenta_Modificado_v3()

Dim hojaOrigen As Worksheet, hojaNueva As Worksheet
Dim fila As Long, ultimaFila As Long
Dim wb As Workbook
Dim dict As Object
Dim clave As String
Dim celda As Range
Dim datos As Variant
Dim nombreHoja As String
Dim filaNueva As Long
Dim hojaItem As Variant

Set wb = ThisWorkbook
Set dict = CreateObject("Scripting.Dictionary")

Application.ScreenUpdating = False

' Recorrer todas las hojas
For Each hojaOrigen In wb.Sheets
    If hojaOrigen.Name <> "Resumen" Then
        ultimaFila = hojaOrigen.Cells(hojaOrigen.Rows.Count, 1).End(xlUp).Row

        For fila = 2 To ultimaFila
            ' Modificado: Volver a leer hasta la columna L
            datos = hojaOrigen.Range("A" & fila & ":L" & fila).Value ' A:L

            ' Clave única por CIFBanco y Cuenta
            clave = datos(1, 2) & "_" & datos(1, 3) ' CIFBanco & NumeroCuenta

            ' Si n
            If Not dict.exists(clave) Then
                Set hojaNueva = Sheets.Add(After:=Sheets(Sheets.Count))
                nombreHoja = "C_" & datos(1, 2) & "_" & datos(1, 3)
                On Error Resume Next
                hojaNueva.Name = Left(nombreHoja, 31)
                On Error GoTo 0
                dict.Add clave, hojaNueva

                With hojaNueva
                    .Cells(1, 1).Value = "Detalle de Transacciones por Cuenta"
                    ' Modificado: Merge hasta la columna I
                    .Range("A1:I1").Merge
                    .Range("A1").Font.Bold = True
                    .Range("A1").HorizontalAlignment = xlCenter

                    .Rows(2).EntireRow.ClearContents
                    .Rows(3).EntireRow.ClearContents

                    .Cells(4, 1).Value = "Cliente"
                    .Cells(4, 2).Value = datos(1, 2)
                    .Cells(5, 1).Value = "Cuenta"
                    .Cells(5, 2).Value = datos(1, 3)

                    .Range("A4:B5").Font.Bold = True

                    .Range("A7").Value = "Fecha_proceso"
                    .Range("B7").Value = "CodigoTransaccion"
                    .Range("C7").Value = "Tipo"
                    .Range("D7").Value = "DescripcionTransaccion"
                    .Range("E7").Value = "MontoDolares"
                    .Range("F7").Value = "Monto"
                    .Range("G7").Value = "Lote"
                    ' Modificado: Agregar nuevos encabezados
                    .Range("H7").Value = "CIFBanco"
                    .Range("I7").Value = "Referencia"
                    .Range("A7:I7").Font.Bold = True
                    .Range("A7:I7").HorizontalAlignment = xlCenter
                    .Activate
                    ActiveWindow.DisplayGridlines = False
                End With
            End If

            Set hojaNueva = dict(clave)
            filaNueva = hojaNueva.Cells(hojaNueva.Rows.Count, 1).End(xlUp).Row + 1

            hojaNueva.Cells(filaNueva, 1).Value = datos(1, 1) ' Fecha_proceso
            hojaNueva.Cells(filaNueva, 2).Value = datos(1, 5) ' CodigoTransaccion
            hojaNueva.Cells(filaNueva, 3).Value = datos(1, 4) ' Tipo
            hojaNueva.Cells(filaNueva, 4).Value = datos(1, 6) ' DescripcionTransaccion
            ' Modificado: MontoDolares se toma del índice 12 (columna L)
            hojaNueva.Cells(filaNueva, 5).Value = datos(1, 12) ' MontoDolares
            hojaNueva.Cells(filaNueva, 6).Value = datos(1, 11) ' Monto
            hojaNueva.Cells(filaNueva, 7).Value = datos(1, 9) ' Lote
            ' Modificado: Agregar CIFBanco y Referencia
            hojaNueva.Cells(filaNueva, 8).Value = datos(1, 2) ' CIFBanco
            hojaNueva.Cells(filaNueva, 9).Value = datos(1, 8) ' Referencia

        Next fila
    End If
Next hojaOrigen

' Agregar FIN DEL REPORTE
For Each hojaItem In dict.Items
    If TypeName(hojaItem) = "Worksheet" Then
        With hojaItem
            Dim ultFila As Long
            ultFila = .Cells(.Rows.Count, 1).End(xlUp).Row
            .Cells(ultFila + 1, 1).EntireRow.ClearContents
            ' Modificado: Merge hasta la columna I
            .Range("A" & ultFila + 2 & ":I" & ultFila + 2).Merge
            .Range("A" & ultFila + 2).Value = "***FIN DEL REPORTE***"
            .Range("A" & ultFila + 2).HorizontalAlignment = xlCenter
            .Range("A" & ultFila + 2).Font.Bold = True
        End With
    End If
Next hojaItem

Application.ScreenUpdating = True
MsgBox "Reportes generados correctamente.", vbInformation

End Sub