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

Escrito por Administrador

23 de septiembre de 2021

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.

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. Borrar una hoja sin mostrar aviso.

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, 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

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

« L2. Crear y editar botones. Asignar macros a botones.

L4. Seleccionar celdas y rangos en una macro. »

Categorías

abril 2024
LMXJVSD
1234567
891011121314
15161718192021
22232425262728
2930 

Debates en el foro

Avatar
Formularios con ADO

Contacto