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