Rapidez de macro, va muy lenta

Tengo esta macro, pero a la hora de ejecutarla tarda mucho tiempo en realizar lo que tiene que hacer, ya que tiene ver la información en más de 90 libros de excel, ¿se podría hacer algo para que fuera más rápido?

Sub Resumen()
'Por.D
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets("Resumen")
    h1.Rows("2:" & Rows.Count).Clear
    '
    ruta = "C:\x\"
    ruta = ThisWorkbook.Path & "\"
    arch = Dir(ruta & "*.xls*")
    hoja = "IVA 3T"
    j = 2
    Do While arch <> ""
        If arch <> l1.Name Then
            Set l2 = Workbooks.Open(ruta & arch)
            existe = False
            For Each h In l2.Sheets
                If UCase(h.Name) = hoja Then
                    existe = True
                    Exit For
                End If
            Next
            If existe = True Then
                Set h2 = l2.Sheets(hoja)
                For i = 37 To 1002
                    If h2.Cells(i, "R") <> "" Then
                        h2.Rows(i).Copy h1.Rows(j)
                        h1.Cells(j, "AA") = h2.Range("D1")
                        j = j + 1
                    End If
                Next
            End If
            l2.Close False
        End If
        j = j + 1
        arch = Dir()
    Loop
    Application.ScreenUpdating = False
    MsgBox " Resumen terimado ", vbInformation, "RESUMEN"
End Sub

1 Respuesta

Respuesta
1

Tienes dos maneras

1)  PRIMERA

Agregando com primera linea de tu macro

Application.Calculation= xlCalculationManual

y como úiltima línea

Application.Calculation= xlCalculationAutomatic

Eso hará que todo el proceso se haga sin ir actualizando los valores en Excel conforme vayas copiando los datos... Se detiene el recalculo de fórmulas hasta el final de todo el proceso en que se calcula todo de golpe. Tu macro es por definición lenta porque va copiando y pegando (escribiendo) línea a línea y probablemente en cada una de ellas Excel se ve forzado a recalcular TODAS las fórmulas.

2)  SEGUNDA

Y solo dependiendo de los datos.. hay que ver si la estructura lo permite.

Crear una conexión a los archivos en toda una carpeta... mediante una consulta con DataQuery... esto es increíblemente más rápido, pero no te puedo decir si es realizable sin ver ejemplo de la estructura de los archivos.

Buenos días

gracias por contestar, pero tengo una duda donde se pone Application.Calculation= xlCalculationAutomatic, supongo que antes del msgbox, verdad???

La segunda opción que me indicas, ¿cómo lo podría saber si es posible? Si me dejas un email te puedo mandar algún archivo para que lo veas

Un saludo

La que es con manual... es la primera línea de la macro

La que es automatic es la última. El msgbox no hace nada en la macro más que informar que todo ha terminado... no interesa si lo pones antes o después.

La segunda opción que me indicas, ¿cómo lo podría saber si es posible? Si me dejas un email te puedo mandar algún archivo para que lo veas

Un saludo

[email protected]

Adjunta el archivo "consolidado" (aquel con la macro) y unos 2 o 3 de aquellos que son la fuente... para ver si hay como ubicar un "patrón"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas