Lección 3. Función ScreenUpdate. Mensajes de aviso.

Lección 3. Función ScreenUpdate. Mensajes de aviso.

En esta tercera lección, vas a aprender a habilitar/deshabilitar el refresco de la pantalla, así como activar/desactivar los cuadros de diálogo con mensajes de aviso que en ocasiones, sobre todo cuando queremos automatizar cálculos, son molestos. Comenzamos!

El refresco de pantalla se encuentra activado por defecto en Microsoft Excel. ¿Qué significa esto? Pues que cada comando que ejecutemos dentro de una macro, se va a mostrar en pantalla. Y...¿esto es bueno? No siempre.

Imagínate un código con bucles, cambios de hojas, cálculos complejos…todo esto va a hacer que nuestra macro se ralentice. Si además, Excel va a tener que mostrar en pantalla el resultado de cada operación, multiplica los tiempos.

Vamos a ver un ejercicio práctico para que veáis este efecto.

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” y asígnale esta macro. Pulsa el botón “Visualizo” para ejecutarla.

Como ves, las celdas van cambiando su valor desde 0 hasta 9. Y tú lo estás viendo en tiempo real.

Borra ahora manualmente todos los valores de la columna A, seleccionándola, pulsando el botón derecho del ratón y eligiendo "Borrar contenido".

 

 

Bien, ahora crea otro botón con el nombre “No visualizo” y asígnale la siguiente macro. 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 esta ocasión, obtenemos el resultado final (columna A con valor igual a 9) sin ver todos los pasos intermedios y, lo más importante, con menor tiempo de ejecución.

 

 

Lo que hemos hecho es añadir a la primera macro dos líneas nuevas.

 

Application.ScreenUpdating = False

 

Application.ScreenUpdating = True

 

La primera desactiva el refresco de pantalla, y la segunda lo vuelve a activar.

Mi consejo es siempre desactivar el refresco de la pantalla al comienzo de la macro (a no ser que sea una macro de tres líneas) y volverla a activar al final de la macro.

El segundo punto que quería que vieras hoy es la activación/desactivación de avisos. Si queremos automatizar un cálculo que requiere abrir y cerrar libros, guardar cambios…no podemos estar pendientes de ir pulsando sobre los cuadros de diálogo.

Vamos a crear un nuevo libro Excel, y a crear la siguiente macro con su respectivo botón. La lanzamos pulsando el botón.

 

Macro 3

Sub Leccion3_3()

'Macro que borra la Hoja 3 de nuestro libro

On Error GoTo final

Worksheets("Hoja3").Delete

final:

MsgBox "Hoja 3 borrada"

End Sub

 

Esta macro no hace más que borrar la Hoja 3 de nuestro libro Excel. Pero antes de hacerlo, Excel nos avisa de que perderemos los datos que contiene, algo que ya sabemos.

 

 

Podemos evitar que aparezca este mensaje de aviso programando la macro de la siguiente manera. Inserta un nuevo módulo y copia este código:

 

Macro 4

Sub Leccion3_4()

'Macro que borra la hoja 2 de nuestro libro desactivando mensajes de aviso

On Error GoTo final

Application.DisplayAlerts = False

Worksheets("Hoja2").Delete

Application.DisplayAlerts = True

final:

MsgBox "Hoja 2 borrada"

End Sub

 

Asocia un botón a esta macro y ejecútala.

Ahora, nos ha borrado la Hoja 2 del libro sin preguntar.

Lo que hemos hecho es añadir dos líneas nuevas de comando:

 

Application.DisplayAlerts = False

 

Application.DisplayAlerts = True

 

La primera desactiva los avisos, y la segunda los vuelve a activar.

Con esto llegamos al final de la tercera lección. Espero que te esté gustando el curso y 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.

 


Deja 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.