Optimizar fórmula para un trabajo más rápido

Estoy tratando de optimizar unas fórmulas que se encargan de copiar datos de una hoja a otra sin que salga de la hoja activa o al menos lo oculte, he logrado optimizar, por la siguiente:

Sub faltast1()
'
' faltast1 Macro
'
Sheets("t.informe").Visible = True
Sheets("informe").Unprotect Password:="1"
Call notast1
Call estadost1
'
Sheets("t.informe").Select
Range("A4:A43").Select
Selection.Copy
Sheets("Informe").Select
Range("H16").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("informe").Protect Password:="1"
Sheets("t.informe").Visible = False
End Sub

... Optimizada

Sub faltast1()

'

' faltast1 Macro

'

Sheets("informe").Unprotect Password:="1"

Call notast1

Call estadost1

Sheets("t.informe").Range("Faltas_T1").Copy Destination:=Sheets("INFORME").Range("H16")

Sheets("informe").Protect Password:="1"

End Sub

Me hace el mismo trabajo, con una mejor fluidez, el problema esta en que al aplicar filtro, no funciona de la manera correcta como lo hace con las macros "no optimizadas"

'
' filtrotabla Macro
'

'
Application.CutCopyMode = False
Range("tainforme").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("Informe!Criteria"), Unique:=False
Range("O4:V4").Select
Selection.ClearContents

Call Actualiarhoja
Call copiaratempcitaciones
Sheets("temp.citaciones").Visible = False
Sheets("citaciones").Calculate

forma correcta - macro no optimizada

Macro optimizada, no se visualiza datos en "Estado" y "Puntaje".

1 Respuesta

Respuesta
1

¿Tienes rangos fijos de copiar y pegar? Porque si sí los tienes puedes usar estos códigos sólo nombrando las hojas y seleccionando los rangos a copiar y pegar... me perdí en la parte donde aplicas filtros, no entiendo porqué borras el contenido de las celdas tampoco.

Sheets("Hoja2"). Range("A1:A10"). Copy
Sheets("Hoja1"). Range("B1"). PasteSpecial (xlPasteValues)

Con estos códigos no necesitas hacer que se oculten y muestren las hojas ya que las mandas a llamar, que igual si no quieres que se vean los procesos puedes usar las siguientes líneas al iniciar tu código, repites al final del mismo pero con valor 'True'.

with application
.screenupdating = false
.displayalerts = false
.enableeventes = false
end with

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas