Agilizar macro que presenta lentitud

Tengo la siguiente rutina pero es muy lenta, y aunque tengo apagado el Screen Update sin embargo se ve la ejecución en algunas partes, espero me puedan ayudar:

Sub NuevoReclamo()
Application.ScreenUpdating = False
ActiveSheet.Unprotect
    Range("LN32:MM32").Select
    Selection.Insert Shift:=xlDown
    Range("LN33:MM33").Select
    Selection.Copy
    Range("LN32:MM32").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Range("MB33:MD33").Select
    Selection.Copy
    Range("MB32:MD32").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Range("LW33").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("LW32").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Range("LN32").Select
    Application.CutCopyMode = False
        Range("LP33").Select
    Selection.Copy
    Range("LP32").Select
    ActiveSheet.Paste
    Range("LP32").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("LT33:LV33").Select
    Selection.Copy
    Range("LT32").Select
    ActiveSheet.Paste
    Range("LT32:LV32").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("LZ33").Select
    Selection.Copy
    Range("LZ32").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("LN32").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingColumns:=True, AllowSorting:=True, AllowFiltering:=True _
        , AllowUsingPivotTables:=True
Application.ScreenUpdating = True
End Sub

2 Respuestas

Respuesta
2

Si bien hay algunas instrucciones que pueden omitirse, si este proceso que parece sencillo se te demora, se debe a que algunos o todos esos rangos tienen fórmula.

Y en ese caso ante cada cambio que realizás se te recalcula la hoja.

Si este es tu caso, entonces lo que tenés que agregar (REVISANDO EN CADA PASO SI ES NECESARIO O NO) es una instrucción que pasa la hoja a modo de cálculo manual y recién la vuelve a automático al final.

  Application.Calculation = xlManual

Application.Calculation = xlAutomatic

Y solo como detalle, estas 4 instrucciones:

Range("LZ33").Select
    Selection.Copy
    Range("LZ32").Select
    ActiveSheet. Paste

se pueden resumir en ésta, en los casos que no requiere pegado especial:

Range("LZ33").Copy Destination:=Range("LZ32")

Sdos!

Respuesta
1

Para agilizar las macros se debe evitar poner códigos innecesarios como hace la grabadora de macros, como parece tu código; opino lo mismo que la prestigiosa ElsaMatilde resume en uno cuatro o cinco líneas, puedo agregar a lo ya dicho; evita el comando select usa activate en la medida de lo posible, la verdad es un código muy corto para que demore tanto como dices.

visita http://programarexcel.com

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas