En esta tercera lección, vas a aprender a utilizar la función ScreenUpdate en un macro para habilitar/deshabilitar el refresco de la pantalla. Asimismo, aprenderás cómo activar/desactivar los mensajes de aviso que en ocasiones son muy molestos. Sobre todo cuando queremos automatizar cálculos. Comenzamos!
En primer lugar, tienes que saber que el refresco de pantalla se encuentra activado por defecto en Microsoft Excel. Por lo tanto, cada comando que ejecutemos dentro de una macro, se va a mostrar en pantalla. Y, ciertamente, esto no es bueno siempre.
Por ejemplo, imagina un código con bucles, cambios de hojas, cálculos complejos… Sin duda, todo esto va a hacer que nuestra macro se ralentice... Y, si además, Excel tiene que mostrar en pantalla el resultado de cada operación, seguramente los tiempos se multipliquen.
Vamos a realizar un ejercicio práctico para que veáis este efecto. Después, veremos como solucionarlo.
Crea un libro nuevo, abre el editor VBA, inserta un módulo y pega la siguiente macro:
Macro 1. Muestra el efecto sin ScreenUpdate.
Sub Leccion3_1()
'Macro para ver el efecto sin ScreenUpdate
For i = 1 To 10
Cells(i, 1) = 0
Next
For i = 1 To 10
Cells(i, 1) = 1
Next
For i = 1 To 10000
Cells(i, 1) = 2
Next
For i = 1 To 10000
Cells(i, 1) = 3
Next
For i = 1 To 10000
Cells(i, 1) = 4
Next
For i = 1 To 10000
Cells(i, 1) = 5
Next
For i = 1 To 10000
Cells(i, 1) = 6
Next
For i = 1 To 10000
Cells(i, 1) = 7
Next
For i = 1 To 10000
Cells(i, 1) = 8
Next
For i = 1 To 10000
Cells(i, 1) = 9
Next
End Sub
Crea un botón con el nombre “Visualizo”, asígnale esta macro y, seguidamente, púlsalo para ejecutarla. (Aquí te dejo el enlace al tema anterior donde explico como crear, editar y asignar macros a botones).
Como resultado, las celdas cambian su valor desde 0 hasta 9. Y, mientras, tú lo ves en tiempo real.
Ahora borra manualmente todos los valores de la columna A, seleccionándola pulsando el botón derecho del ratón y, después, elige Borrar contenido.
Ahora, en cambio, vamos a hacer uso de la función ScreenUpdate en la macro. Para ello crea otro botón con el nombre “No visualizo” y asígnale la siguiente macro. Después, pulsa el botón “No visualizo” para ejecutarla.
Macro 2. Muestra el efecto con ScreenUpdate.
Sub Leccion3_2()
'Macro para ver el efecto con ScreenUpdate
Application.ScreenUpdating = False
For i = 1 To 10000
Cells(i, 1) = 0
Next
For i = 1 To 10000
Cells(i, 1) = 1
Next
For i = 1 To 10000
Cells(i, 1) = 2
Next
For i = 1 To 10000
Cells(i, 1) = 3
Next
For i = 1 To 10000
Cells(i, 1) = 4
Next
For i = 1 To 10000
Cells(i, 1) = 5
Next
For i = 1 To 10000
Cells(i, 1) = 6
Next
For i = 1 To 10000
Cells(i, 1) = 7
Next
For i = 1 To 10000
Cells(i, 1) = 8
Next
For i = 1 To 10000
Cells(i, 1) = 9
Next
Application.ScreenUpdating = True
End Sub
En realidad, el resultado final obtenido es el mismo (columna A con valor igual a 9), pero sin ver todos los pasos intermedios. Además, con un menor tiempo de ejecución.
En particular, lo que hemos hecho es añadir la función ScreenUpdate a la primera macro incorporando dos líneas nuevas.
Application.ScreenUpdating = False
Application.ScreenUpdating = True
Primero, desactivamos el refresco de pantalla con la primera línea. Finalmente, la segunda vuelve a activarlo.
Es por ello, que mi consejo es usar la función ScreenUpdate en nuestra macro y desactivar siempre el refresco de la pantalla al comienzo (a no ser que sea una macro sencilla) para volverlo a activar al final de la misma.
En segundo lugar, hoy quiero que aprendas cómo activar/desactivar avisos. En realidad, es algo muy útil. Sobre todo si queremos automatizar un cálculo, ya que sería engorroso tener que estar pendientes de ir pulsando sobre cuadros de diálogo aceptando condiciones para que el cálculo avanzase.
De igual forma que hicimos antes, vamos a crear un nuevo libro Excel con un botón asignado a la siguiente macro.
Macro 3. Borrar una hoja mostrando aviso.
'Macro que borra la Hoja 3 de nuestro libro
Worksheets("Hoja3").Delete
End Sub
Esta macro borra la Hoja 3 de nuestro libro Excel pero, antes de hacerlo, Excel nos avisa de que perderemos los datos que contiene. Sin duda, algo que ya sabemos.
Sin embargo, podemos evitar que aparezca este mensaje de aviso programando la macro de la siguiente manera. Igual que hicimos antes, inserta un nuevo módulo, copia este código, asocia un botón a esta macro y ejecútala.
Macro 4. Borrar una hoja sin mostrar aviso.
'Macro que borra la hoja 2 de nuestro libro desactivando mensajes de aviso
Application.DisplayAlerts = False
Worksheets("Hoja2").Delete
Application.DisplayAlerts = True
End Sub
De esta manera, la macro nos ha borrado la Hoja 2 del libro sin preguntar. En realidad, lo único que hemos hecho es añadir dos líneas nuevas de comando:
Application.DisplayAlerts = False
Application.DisplayAlerts = True
Primero, desactivamos los cuadros de diálogo de avisos con la primera línea. Después, la segunda los vuelve a activar.
Con todo esto, llegamos al final de la tercera lección, en la que has aprendido a utilizar la función ScreenUpdate en una macro para activar/desactivar el refresco de pantalla. Asimismo, has aprendido también a mostrar/ocultar avisos.
Por último, quiero invitarte a compartir tus dudas en los comentarios o en el foro. Intentaré ayudarte en todo lo que pueda, y así aprenderemos todos.
Nos vemos en el próximo capítulo.
Si te ha servido y quieres donar
Descarga el archivo del ejemplo
« L2. Crear y editar botones. Asignar macros a botones.
L4. Seleccionar celdas y rangos en una macro. »
0 comentarios