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
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
- Compartir respuesta