Su pantalla de Excel parpadea o destella rápidamente cuando se ejecuta una macro de VBA. Esta distracción visual hace que la macro parezca lenta y poco profesional. La causa es que Excel vuelve a dibujar la pantalla después de cada cambio que realiza su código. Este artículo explica cómo usar la propiedad ScreenUpdating para eliminar el parpadeo y acelerar sus macros.
Puntos clave: Detener el parpadeo de pantalla en VBA
- Application.ScreenUpdating = False: Desactiva el redibujado de pantalla al inicio de su macro para evitar el parpadeo y mejorar el rendimiento.
- Application.ScreenUpdating = True: Vuelve a activar las actualizaciones de pantalla al final de su macro para mostrar el resultado final y restaurar la interacción normal con Excel.
- Manejo de errores con ScreenUpdating: Asegura que las actualizaciones de pantalla se vuelvan a activar siempre, incluso si su macro encuentra un error en tiempo de ejecución y se detiene.
Por qué las macros de VBA causan parpadeo de pantalla
Excel está diseñado para mostrarle cada cambio a medida que ocurre. Cuando su código VBA se ejecuta, puede modificar celdas, dar formato a rangos o insertar gráficos. De forma predeterminada, Excel intenta mostrar cada una de estas acciones de inmediato. Esto hace que la aplicación actualice constantemente la ventana, lo que produce un efecto de parpadeo o destello.
La propiedad ScreenUpdating controla este comportamiento. Cuando se establece en True, Excel actualiza la pantalla. Cuando se establece en False, Excel pausa todas las actualizaciones visuales. Esto permite que su código se ejecute en segundo plano. La pantalla permanece estática hasta que vuelva a activar la actualización. Esto no solo detiene el parpadeo, sino que también hace que su macro se ejecute más rápido porque Excel no pierde tiempo dibujando.
Cuándo desactivar ScreenUpdating
Use ScreenUpdating = False para cualquier macro que realice múltiples operaciones. Esto incluye bucles que procesan muchas filas, código que aplica formato a áreas grandes o scripts que mueven datos entre hojas. Para macros muy cortas que cambian solo una celda, el beneficio es mínimo. El objetivo principal es agrupar los cambios visuales.
Pasos para implementar ScreenUpdating en sus macros
El método correcto implica desactivar la propiedad, ejecutar su código principal y luego volver a activarla. También debe incluir manejo de errores para evitar que la propiedad quede desactivada.
- Abra el Editor de Visual Basic
Presione Alt + F11 en su teclado para abrir el entorno de desarrollo de VBA. - Inserte el comando ScreenUpdating
Al comienzo de su procedimiento de macro, antes de cualquier otro código, escribaApplication.ScreenUpdating = Falseen su propia línea. - Agregue su código principal de macro
Escriba o pegue el código que realiza sus tareas, como copiar datos o dar formato a celdas, debajo de la línea de ScreenUpdating. - Vuelva a activar la actualización de pantalla
Al final de su macro, justo antes de la declaraciónEnd Sub, escribaApplication.ScreenUpdating = True.
Agregar manejo básico de errores
Para que su macro sea robusta, use un manejador de errores simple. Esto asegura que ScreenUpdating se establezca siempre en True, incluso si el código falla.
- Configure el manejador de errores
Después de la líneaApplication.ScreenUpdating = False, agregueOn Error GoTo ErrorHandler. - Etiquete el final de su código principal
Después de su código principal y antes de la líneaApplication.ScreenUpdating = True, agregueExit Suben su propia línea. - Cree la etiqueta del manejador de errores
Debajo de la líneaExit Sub, agregue una nueva línea con la etiquetaErrorHandler:. - Agregue el comando de restablecimiento en el manejador
En la línea después de la etiqueta, escribaApplication.ScreenUpdating = True. Luego agregueMsgBox "An error occurred: " & Err.Descriptionpara alertar al usuario.
Errores comunes y limitaciones de ScreenUpdating
La macro falla y deja ScreenUpdating desactivado
Si su macro encuentra un error y se detiene sin volver a activar ScreenUpdating, Excel parecerá congelado. No verá ningún cambio que haga manualmente. Para solucionarlo, ejecute una macro simple de una línea desde la ventana Inmediato. Presione Ctrl + G en el Editor de VBA, escriba Application.ScreenUpdating = True y presione Enter.
La pantalla no se actualiza en absoluto después de ejecutar la macro
Esto sucede si olvida establecer ScreenUpdating = True al final de su macro. Verifique los puntos de salida de su código. Cada ruta posible a través de la macro, incluidas las salidas tempranas dentro de las declaraciones If, debe conducir al comando que vuelve a activar la actualización. Usar la estructura de manejo de errores anterior evita esto.
El parpadeo persiste en los controles de UserForm
La propiedad Application.ScreenUpdating no controla el repintado de los controles de UserForm como ListBox o MultiPage. Para estos, es posible que necesite usar los métodos UserForm.Hide y UserForm.Show o controlar propiedades específicas como ListBox.Clear en un lote para minimizar las actualizaciones visuales.
ScreenUpdating frente a otros métodos de rendimiento
| Elemento | Application.ScreenUpdating | Application.Calculation | Application.EnableEvents |
|---|---|---|---|
| Propósito principal | Controla los refrescos visuales de la pantalla | Controla cuándo se recalculan las fórmulas | Evita que se ejecuten procedimientos de eventos |
| Configuración típica | Establecer en False al inicio de la macro | Establecer en xlCalculationManual | Establecer en False al inicio de la macro |
| Ganancia de rendimiento | Elimina el parpadeo, acelera las operaciones de visualización | Acelera las macros que escriben en muchas celdas con fórmulas | Acelera las macros que activan eventos Worksheet_Change |
| Riesgo si se deja desactivado | Excel parece congelado, sin actualizaciones visuales | Las fórmulas muestran resultados obsoletos o incorrectos | Las macros o funciones que dependen de eventos no funcionarán |
| Comando de restablecimiento | Application.ScreenUpdating = True | Application.Calculation = xlCalculationAutomatic | Application.EnableEvents = True |
Ahora puede escribir macros de VBA que se ejecuten sin el molesto parpadeo de pantalla. Comience agregando Application.ScreenUpdating = False a su próximo módulo de código. Para obtener mejoras de velocidad adicionales, combínelo con Application.Calculation = xlCalculationManual. Recuerde usar siempre un manejador de errores para restablecer la propiedad ScreenUpdating a True, garantizando que Excel siga siendo utilizable incluso después de un error de macro.