Lección 3: Función ScreenUpdate en una macro. Mensajes de aviso.

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

Sub Leccion3_1()

‘Macro para ver el efecto del Screenupdating

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

Sub Leccion3_2()

‘Macro para ver el efecto del Screenupdating

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

Sub Leccion3_3()

‘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

Sub Leccion3_4()

‘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, desear que te esté gustando el curso y pedirte que me plantees cualquier duda que te surja. También, puedes proponerme macros que te interese desarrollar y las voy incluyendo en el temario, soy todo oídos. Nos vemos en el próximo capítulo.