Optimizar tiempo de ejecución de Macro (3 archivos)

Tengo esta macro, la cual hace un proceso más menos largo. En si lo que hace es abrir 2 archivos distintos, actualizar unos datos y tablas, traspasarlos a un archivo "generador" con formatos similares (no esta todo en un mismo archivo porque es muy pesada la base ya que le faltan como 40.000 registros aún). El tema es que se demora demasiado en ejecutar e incluso a veces se cae por tiempo... Me pueden ayudar a optimizarla

1 Respuesta

Respuesta
1

Puedes poner la macro

Siii... al hacer la pregunta no me dejaba.

Private Sub CommandButton1_Click()
'Apertura de Archivo Base Real
    Ruta = ThisWorkbook.Path & "\"
    Base1 = "BASE_REAL.xlsb"
    Workbooks.Open Filename:=Ruta & Base1
'Acciones del archivo Base Real
    ActiveSheet.Range("A6").Select
    ActiveSheet.PivotTables("BR_T1").PivotCache.Refresh
    ActiveSheet.Range("A15").Select
    ActiveSheet.PivotTables("BR_T2").PivotCache.Refresh
    ActiveSheet.Range("D5").Select
    ActiveSheet.PivotTables("BR_T3").PivotCache.Refresh
    ActiveSheet.Range("D24").Select
    ActiveSheet.PivotTables("BR_T4").PivotCache.Refresh
    ActiveSheet.Range("I3:I15").Select
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    ActiveSheet.Range("D4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("E4").Select
    Windows("BASE_REAL.xlsb").Activate
    ActiveSheet.Range("J3:J15").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    ActiveSheet.Range("J4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    ActiveSheet.Range("E5").Select
    Windows("BASE_REAL.xlsb").Activate
    ActiveSheet.Range("A4").Select
    ActiveWorkbook.Save
    ActiveWindow.Close
    Windows("GENERADOR.xlsb").Activate
    ActiveSheet.Range("A4").Select
'Apertura de Archivo Digitado
    Ruta2 = ThisWorkbook.Path & "\"
    Base2 = "DIGITADO.xlsb"
    Workbooks.Open Filename:=Ruta2 & Base2
'Actualizacion de tabla CAJAS del archivo Digitado
Application.Calculation = xlManual
Windows("DIGITADO.xlsb").Activate
x1 = ActiveSheet.Range("A" & Rows.Count).End(xlDown).Row
Sheets("CAJAS").Select
ActiveSheet.Range("A3:N" & x1).Select
Selection.ClearContents
ActiveSheet.Range("A2").Select
Sheets("DIGITADO").Select
x2 = ActiveSheet.Range("A" & Rows.Count).End(xlDown).Row
ActiveSheet.Range("A2:A" & x2).Select
Selection.Copy
Sheets("CAJAS").Select
ActiveSheet.Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Sheets("DIGITADO").Select
ActiveSheet.Range("C2:E" & x2).Select
Selection.Copy
Sheets("CAJAS").Select
ActiveSheet.Range("B2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Sheets("DIGITADO").Select
ActiveSheet.Range("T2:T" & x2).Select
Selection.Copy
Sheets("CAJAS").Select
ActiveSheet.Range("E2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Application.CutCopyMode = False
    ActiveSheet.Range("A1:E1").Select
    ActiveSheet.Range(Selection, Selection.End(xlDown)).Select
    ActiveSheet.Range("$A$1:$E$34516").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5) _
        , Header:=xlYes
x3 = Sheets("CAJAS").Range("A" & Rows.Count).End(xlDown).Row
    ActiveSheet.Range("F2:I2").Select
    Selection.Copy
    ActiveSheet.Range("F3:I" & x3).Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    ActiveSheet.Range("A2").Select
Application.Calculation = xlAutomatic
'Acciones de archivo DIGITADO
    Windows("DIGITADO.xlsb").Activate
    Sheets("REP").Select
    ActiveSheet.Range("C3:C15").Select
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    ActiveSheet.Range("E4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("D3:D15").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    ActiveSheet.Range("K4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("K4").Select
    Sheets("INCIDENCIAS").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("C21:C22").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    ActiveSheet.Range("D5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("D9").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("C25:C27").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("D14").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("C30:C32").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("F9").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("D21:D22").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Windows("DIGITADO.xlsb").Activate
    Windows("GENERADOR.xlsb").Activate
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("D25:D27").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    ActiveSheet.Range("F14").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("D30:D32").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("D25:D27").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    ActiveSheet.Range("F9").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("F21:F22").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    ActiveSheet.Range("J5").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("F21:F32").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    ActiveSheet.Range("K5").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("F21:F22").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("K9").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("F25:F27").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("K14").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("F30:F32").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("M5").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("G21:G22").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("O5").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("H21:H22").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("Q5").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("I21:I22").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("M9").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("G25:G27").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("O9").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("H25:H27").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("Q9").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("I25:I27").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("M14").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("G30:G32").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("O14").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("H30:H32").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("Q14").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("I30:I32").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("C21").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("C36").Select
    ActiveSheet.Range("C36:C50").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    ActiveSheet.Range("D21").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("F21").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("D36:D50").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("K21").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("F36:F50").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("M21").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("G36:G50").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("O21").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("H36:H50").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("Q21").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("I36:I50").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("A1").Select
    Sheets("INCIDENCIAS (COMUNAS)").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("C55:C401").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    ActiveSheet.Range("D5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("F5").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("D55:D401").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    ActiveSheet.Range("F5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("I5").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("F55:F401").Select
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    ActiveSheet.Range("I5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("K5").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("G55:G401").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    ActiveSheet.Range("K5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("H55:H401").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    ActiveSheet.Range("M5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("B4").Select
    Sheets("INCIDENCIAS (TIPO POR REGION)").Select
    Windows("DIGITADO.xlsb").Activate
    ActiveSheet.Range("K36:AE50").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("GENERADOR.xlsb").Activate
    ActiveSheet.Range("C5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("B4").Select
    Sheets("CAJAS_PORT").Select
    ActiveSheet.Range("C4").Select
    Windows("DIGITADO.xlsb").Select
    ActiveWorkbook.Save
    ActiveWindow.Close
    Windows("GENERADOR.xlsb").Activate
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

H     o     l     a:

Supongo que la macro está en el libro Generador en la hoja Cajas.

Te sugiero que quites estas líneas:

    For x = 1 To 10

        Application. Wait (Now + TimeValue("0:00:01"))

'Barra de estado para mostrar el progreso

        Application.StatusBar = "Progress: " & x & " of 10: " & Format(x / 10, "0%")

    Next

También al principio de la macro pon esta línea:

Application.ScreenUpdating = False

Revisa si con eso la macro es más rápida.

------------


Otras mejoras que puedes hacer a tu macro. Por ejemplo, tienes esto:

'Acciones de archivo DIGITADO

Windows("DIGITADO.xlsb").Activate

    Sheets("REP").Select

    ActiveSheet.Range("C3:C15").Select

    Selection. Copy

Windows("GENERADOR.xlsb").Activate

    ActiveSheet.Range("E4").Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

Puedes cambiarlo por esto:

'Acciones de archivo DIGITADO

Windows("DIGITADO.xlsb").Sheets("REP").Range("C3:C15").Copy

    Windows("GENERADOR.xlsb").Range("E4").PasteSpecial Paste:=xlPasteValues

Revisa lo que copias y en dónde pegas.

No es necesario que selecciones el archivo, luego la hoja, luego el rango; después el libro destino, la hoja destino y luego pegar.

Puedes copiar haciendo referencia al libro, la hoja y el rango

Y puedes pegar haciendo referencia al libro, la hoja y la celda destino.

Con eso optimizas el código y ayuda a que sea más rápido.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas