Como acelerar una macro

Hola experto
Tengo este código
Lo que deseo es acelerar la macro, ya que la ejecuto y tarda hasta 3 minutos en realizar la operación
sera que sean por los datos son como 70 datos
o por el código
espero me puedas ayudar a solucionar mi problema
saludos cordiales
Sub Actualizamayojunio()
Application.ScreenUpdating = False
Dim mes
letra1 = InputBox("Letra que desea sustituir?  MAYUSCULAS", "ORIGEN")
If letra1 = Empty Then Exit Sub 'mejorar con revisión validez fecha
letra2 = InputBox("letra nueva?  MAYUSCULAS", "DESTINO")
If letra2 = Empty Then Exit Sub 'mejorar con revisión fecha
'Le preguntarás al usuario por las fechas a sustituir y la nueva, y
mes = InputBox("Introducir el mes en el que se esta efectuando?  MAYUSCULAS")
If mes = Empty Then Exit Sub 'mejorar con revisión validez fecha
Set fecha = Selection.Find(What:=letra2)
If fecha Is Nothing Then
Application.DisplayAlerts = False
End If
'MES DE MAYO
If Format(mes) = "MAYO" Then
Selection.Replace What:="GPP\Reportes\[LAYOUT DE OPERACION_MAYO.XLS]modificado'!$" & Format(letra1), Replacement:="GPP\Reportes\[LAYOUT DE OPERACION_MAYO.XLS]modificado'!$" & Format(letra2), LookAt:=xlPart _
        , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Selection.Replace What:="GPP\Reportes\[LAYOUT DE OPERACION_MAYO.XLS]Inventarios'!$" & Format(letra1), Replacement:="GPP\Reportes\[LAYOUT DE OPERACION_MAYO.XLS]Inventarios'!$" & Format(letra2), LookAt:=xlPart _
        , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Selection.Replace What:="GPP\SUBGERENCIA DE AROMATICOS\[layout de operación.xls]BDGPP_MAYO'!$" & Format(letra1), Replacement:="GPP\SUBGERENCIA DE AROMATICOS\[layout de operación.xls]BDGPP_MAYO'!$" & Format(letra2), LookAt:=xlPart _
        , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Else
'MES DE JUNIO
If Format(mes) = "JUNIO" Then
Selection.Replace What:="GPP\Reportes\[LAYOUT DE OPERACION_JUNIO.XLS]modificado'!$" & Format(letra1), Replacement:="GPP\Reportes\[LAYOUT DE OPERACION_JUNIO.XLS]modificado'!$" & Format(letra2), LookAt:=xlPart _
        , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Selection.Replace What:="GPP\Reportes\[LAYOUT DE OPERACION_JUNIO.XLS]Inventarios'!$" & Format(letra1), Replacement:="GPP\Reportes\[LAYOUT DE OPERACION_JUNIO.XLS]Inventarios'!$" & Format(letra2), LookAt:=xlPart _
        , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Selection.Replace What:="GPP\SUBGERENCIA DE AROMATICOS\[layout de operación.xls]BDGPP_JUNIO'!$" & Format(letra1), Replacement:="GPP\SUBGERENCIA DE AROMATICOS\[layout de operación.xls]BDGPP_JUNIO'!$" & Format(letra2), LookAt:=xlPart _
        , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    End If
    End If
MsgBox "Se ha cambiado la letra correctamente"
Application.ScreenUpdating = True
End Sub

3 Respuestas

Respuesta
1
La duración de una macro está en función de varias cosas:
1º La Ram disponible en el PC
2º El procesador que se tenga cuanto más nuevo normalmente más rapido en realizar las operaciones.
3º El grado de desfragmentado del disco duro, cuanto más fragmentado peor (convenfría desfragmentar)
4º El tema más importante la cantidad de celdas a revisar cuantas más operaciones tenga que realizar VBA para ir comprobando todas tus celdas más tardará.
DE todas formas 3 minutos tampoco es tanto yo tengo un formulario que para crear un listado y dar formato a una hoja me tarda 12 minutos, y tengo un buen procesador y mucha ram pero que le vamos a hacer, así es la vida en la informática.
Lo siento, el código que he revisado esta bien pero como desconozco la cantidad de operaciones que tiene que hacer tu macro tampoco te puedo ayudar mucho más.
>Un saludo
>Julio
PD: Si te ha servido putua y finaliza la consulta. No se castiga al mensajero cuando las noticias no son buenas.
Respuesta
1
Como te lo había indicado en una pregunta anterior, antes de hacer los reemplazos debes definir por código el rango de datos, de forma que solo tome un rango donde hayan datos válidos. Recuerda que es más fácil buscar en un rango con datos que forzar a la macro a buscar en toda una columna, ya que si tienes excel 2003, estas obligando al programa a buscar en 65538 celdas. Por eso lo primero que debes hacer es definir el rango con datos y después seleccionar dicho rango para que el programa realice los reemplazos.
Una buena practica en el manejo de estas clases de algoritmos es irse hasta la ultima fila de la columna seleccionada y buscar el primer dato hacia arriba con una instrucción
selection. end(xlup). Activate
esa instrucción te permitirá saber cual es el ultimo dato digitado en esa columna.
Espero que la explicación te haya sido de gran utilidad.
Atentamente.
Excelmaster
Consultoría y desarrollo en VBA
Información y ventas : [email protected]
Se me pasaba, prueba tu código sin que hayan aplicaciones de office activas. Recuerda que también la cantidad de procesos activos y la configuración de hardware pueden retrasar la ejecución del programa.
Respuesta
1
Cual es tu problema o pregunta en si.
Mi pregunta en si
Es como acelerar una macro
Tengo ese código haya arriba
Ese código es el que utilizo
Pero como puedo acelerar la macro
Para que no tarde mucho en ejecutarse
Espero me puedas ayudar
Saludos cordialessssss
La velocidad de las macros depende directamente del diseño de las mismas, es decir tu forma de hacer las cosas dentro de la macro, si quieres mejorar la velocidad de tu macro debes modificar tu macro, buscando un mejor diseño de la misma.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas