🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA DisplayAlerts en Excel — silencia los avisos de confirmación de las macros desatendidas (y por qué auto-confirma las peligrosas)

|

VBA DisplayAlerts en Excel — silencia los avisos de confirmación de las macros desatendidas (y por qué auto-confirma las peligrosas)

TL;DRApplication.DisplayAlerts = False le dice a Excel que deje de mostrar sus cuadros de confirmación y advertencia mientras corre tu macro, así que una macro puede borrar una hoja o guardar sobre un archivo sin pararse a pedirle a un humano que pulse Aceptar. La pega es que no cancela la pregunta — la responde con la respuesta por defecto de Excel, y para los avisos destructivos esa respuesta por defecto es «adelante». Vuelve a activarlo en cuanto termine la línea de riesgo, y restáuralo en un manejador de errores para que un fallo no pueda dejar los avisos apagados mientras un aviso posterior se auto-responde:

Sub DeleteSheetQuietly()
    Application.DisplayAlerts = False        ' Excel no preguntara si estas seguro
    On Error GoTo CleanExit                   ' para que un error no deje los avisos apagados
    ThisWorkbook.Worksheets("Temp").Delete    ' sin aviso - Excel simplemente la borra
CleanExit:
    Application.DisplayAlerts = True          ' vuelve a activar los avisos de inmediato
End Sub

Antes de un puñado de operaciones de riesgo — borrar una hoja, guardar sobre un archivo existente, cerrar con cambios sin guardar — Excel se para y lanza un cuadro de diálogo para asegurarse de que un humano lo quería de verdad. Ese es exactamente el comportamiento correcto para una persona haciendo clic por ahí, y exactamente el equivocado para una macro que se supone que corre de principio a fin sola. DisplayAlerts = False elimina la interrupción. Esta guía se construye sobre una sola idea — DisplayAlerts no silencia el aviso, lo responde por ti con la respuesta por defecto de Excel, y para los avisos destructivos esa respuesta es que sí. Una vez lo ves así, sabes dónde encaja (un aviso concreto que controlas y entiendes) y dónde es un arma cargada (cubrir a ciegas una macro entera que no has auditado).

Lo que aprenderás

  • El modelo mental — Excel pregunta antes de las operaciones de riesgo; este interruptor responde con la opción por defecto
  • Dónde la respuesta por defecto es «sí, destrúyelo» — los avisos que se vuelven silenciosos y peligrosos
  • La regla que más importa — reduce la ventana a la única línea que la necesita, y luego restaura
  • Por qué DisplayAlerts = False no es manejo de errores — un error en tiempo de ejecución sigue deteniendo tu macro
  • En qué se diferencia de ScreenUpdating, Calculation y EnableEvents
  • Cuándo sí quieres el cuadro de diálogo — y echas mano de MsgBox en su lugar

El modelo mental: Excel pregunta, este interruptor responde con la opción por defecto

Un pequeño conjunto de operaciones de Excel se tratan como momentos de «¿estás seguro?». Borra una hoja y Excel te avisa de que es permanente. Haz SaveAs sobre un nombre de archivo que ya existe, y pregunta antes de sobrescribir. Cierra un libro con ediciones sin guardar, y ofrece guardarlas. Cada una de estas lanza un cuadro de diálogo modal y espera un clic.

Application.DisplayAlerts = False le dice a Excel que se salte el cuadro de diálogo y continúe con su botón por defecto — el que está preseleccionado cuando aparece el cuadro. No está ocultando el cuadro y haciendo una pausa; está eligiendo una respuesta y siguiendo adelante. Esa distinción es todo el artículo. No estás silenciando una molestia, estás preaprobando una decisión — y la opción por defecto de Excel para un borrado o una sobrescritura es hacerlo.

Application.DisplayAlerts = False   ' Excel deja de preguntar y usa la respuesta por defecto
' ... la operacion de riesgo corre sin cuadro de dialogo ...
Application.DisplayAlerts = True    ' se reanudan las preguntas

Dónde la respuesta por defecto es «sí, destrúyelo»

Esta es la parte que los tutoriales de «desactivar mensajes de advertencia» se saltan. Esto es lo que hace en realidad la respuesta por defecto que suprimiste:

Operación El cuadro de diálogo que suprimiste Qué hace DisplayAlerts = False
Worksheets("X").Delete «Esta hoja se borrará permanentemente» La borra, sin confirmación
SaveAs sobre un archivo existente «Ya existe un archivo — ¿reemplazarlo?» Sobrescribe el archivo antiguo
Close con cambios sin guardar «¿Quieres guardar?» Usa la opción por defecto (puede descartar ediciones)
Pegar sobre celdas no vacías «¿Sobrescribir el contenido?» Las sobrescribe

Cada una de esas es un caso en el que la advertencia existía para protegerte, y apagarla no hace la operación más segura — la hace silenciosa. Una persona habría leído el cuadro y habría tenido la oportunidad de decir que no. Tu macro dice que sí a todas, al instante, sin dejar rastro.

La regla que más importa: reduce la ventana, luego restaura

Como estás preaprobando las opciones por defecto de Excel, el peligro escala con cuánto tiempo permanecen apagados los avisos y cuánto corre durante esa ventana. La disciplina es la opuesta a la de los interruptores de rendimiento, donde envuelves la macro entera. Con DisplayAlerts, envuelve solo la única operación que lo necesita:

' BIEN - la ventana tiene una sola linea de ancho
Application.DisplayAlerts = False
ThisWorkbook.Worksheets("Temp").Delete
Application.DisplayAlerts = True
' ... el resto de la macro corre con los avisos de vuelta ...
' ARRIESGADO - los avisos estan apagados durante toda la macro
Application.DisplayAlerts = False
' ... 200 lineas, cualquiera de las cuales podria toparse con un aviso de sobrescritura o borrado ...
Application.DisplayAlerts = True

En la versión arriesgada, si cualquier línea de ese bloque lanza un aviso de «¿guardar sobre este archivo?» o «¿vaciar este rango?» que no anticipaste, se responde «sí» antes de que llegues a enterarte de que pasó. Mantén la ventana ajustada, y aun así protégela con On Error GoTo CleanExit para que, si la propia línea de riesgo falla, no dejes los avisos apagados mientras el siguiente aviso de la macro se auto-confirma. El restaurado pertenece a la misma disciplina de la etiqueta CleanExit que comparte todo el clúster — ve VBA On Error.

Se restablece solo — pero no te apoyes en eso

A diferencia de Calculation y EnableEvents, que siguen apagados hasta que los vuelves a activar tú o un reinicio, DisplayAlerts se restablece a True automáticamente cuando tu macro termina y el control vuelve a Excel. Eso suena como si hiciera la línea de restaurado opcional. No lo hace, por dos razones:

  1. El daño ya está hecho. El auto-restablecimiento ocurre después de que la macro termina. Si una hoja se borró en silencio en la línea 40, restablecer los avisos en la línea 200 no la trae de vuelta.
  2. Lo que importa es la ventana, no el final. Entre el «apagar» y el «el control vuelve a Excel», cada aviso se auto-responde. Un error a mitad de macro que se salte tu restaurado deja los avisos apagados para lo que sea que corra después en esa llamada. El restaurado explícito mantiene la ventana exactamente tan ancha como pretendías.

Así que trata el auto-restablecimiento como una red de seguridad para la sesión, no como una razón para saltarte la línea. Vuelve a ponerlo tú mismo, justo después de la operación que necesitaba tenerlo apagado.

Por qué no es manejo de errores

Una confusión común: la gente pone DisplayAlerts = False esperando que la macro atraviese a la fuerza un error en tiempo de ejecución — como si suprimiera todas las interrupciones. No lo hace. Suprime los cuadros de confirmación y advertencia de Excel. Un error en tiempo de ejecución de verdad (un 1004 por un rango incorrecto, un tipo incompatible, un archivo no encontrado) sigue lanzándose y sigue deteniendo tu macro en seco.

Application.DisplayAlerts = False
Workbooks.Open "C:\does-not-exist.xlsx"   ' sigue lanzando el error 1004 - apagar los avisos no ayuda

Si quieres que tu macro sobreviva a los errores, ese es el trabajo de On Error, no el de esta propiedad. DisplayAlerts decide si Excel pregunta; On Error decide qué pasa cuando algo se rompe. Dos problemas distintos, dos herramientas distintas.

DisplayAlerts frente a los interruptores junto a los que se suele poner

Verás DisplayAlerts = False al principio de una macro junto a ScreenUpdating y Calculation, y es fácil archivarlos a todos como «código repetitivo que pones para acelerar las cosas». No son el mismo tipo de cosa:

  • ScreenUpdating es cosmético — en el peor caso, una ventana con pinta de congelada que un reinicio arregla.
  • Calculation va sobre la corrección de los números — dejado apagado, muestra valores obsoletos.
  • EnableEvents va sobre la corrección de los eventos — dejado apagado, los manejadores del libro dejan de dispararse.
  • DisplayAlerts va sobre decisiones — hace que Excel se comprometa con acciones destructivas sin preguntar.

Y es el único que normalmente se autocorrige y aun así puede causar un daño irreversible dentro de la ventana. Los demás fallan a voces (pantalla congelada) o en silencio pero de forma recuperable (el recálculo arregla los números obsoletos). Una hoja borrada con los avisos apagados simplemente ya no está.

Cómo ayuda ExcelMaster

DisplayAlerts es una sola línea, pero usarlo bien significa mantener la ventana reducida a la única operación que lo necesita, restaurarlo en un manejador de errores, y no confundirlo nunca con el manejo de errores ni con un interruptor genérico de «haz que mi macro se calle». Es mucho criterio para una propiedad que la gente pega al principio de cada macro.

ExcelMaster escribe la versión cuidadosa por defecto. Pídele «borra las hojas temporales sin los pop-ups de confirmación» y apaga los avisos alrededor de exactamente esos borrados, los restaura en un manejador CleanExit, y deja el resto de la macro con las advertencias intactas — así te llevas la ejecución desatendida sin preaprobar en silencio cada aviso que Excel habría lanzado.

Preguntas frecuentes

¿Qué hace Application.DisplayAlerts = False en VBA?

Le dice a Excel que deje de mostrar sus cuadros de confirmación y advertencia mientras corre tu macro y que continúe con la respuesta por defecto de cada cuadro en su lugar. Las operaciones que normalmente preguntarían — borrar una hoja, sobrescribir un archivo con SaveAs, cerrar con cambios sin guardar — ocurren sin ningún aviso. No oculta los errores en tiempo de ejecución, solo los avisos integrados de Excel.

¿Tengo que volver a poner DisplayAlerts en True?

Excel lo restablece a True automáticamente cuando la macro termina, así que no lo dejarás apagado entre sesiones. Pero aun así deberías restaurarlo de forma explícita, justo después de la operación que necesitaba tenerlo apagado, porque cada aviso que se lance mientras está apagado se auto-responde. Pon el restaurado en un manejador de errores (On Error GoTo CleanExit) para que un fallo a mitad de macro no pueda dejar los avisos apagados para lo que sea que corra después.

¿DisplayAlerts = False evita que mi macro se caiga ante los errores?

No. Suprime los cuadros de confirmación y advertencia de Excel, no los errores en tiempo de ejecución de VBA. Una ruta de archivo incorrecta, un rango inválido o un tipo incompatible siguen lanzando un error y deteniendo la macro. Para manejar los errores, usa On Error — es un mecanismo aparte de DisplayAlerts.

¿Por qué se borró mi hoja o se sobrescribió mi archivo sin ningún aviso?

Porque DisplayAlerts = False estaba en efecto, así que Excel usó la respuesta por defecto para el aviso de «¿estás seguro?» — y para borrar una hoja o sobrescribir un archivo, la opción por defecto es hacerlo. Reduce la ventana para que los avisos solo estén apagados alrededor de la única operación que pretendes, y vuelve a activarlos inmediatamente después.

¿Cuál es la diferencia entre DisplayAlerts, ScreenUpdating y Calculation?

Controlan cosas distintas. DisplayAlerts decide si Excel pregunta antes de las operaciones de riesgo. ScreenUpdating detiene los repintados de pantalla (cosmético). Calculation detiene el recálculo de fórmulas (dejarlo apagado muestra números obsoletos). A menudo se ponen juntos, pero olvidar cada uno cuesta algo muy distinto.

Probado en

Probado en: Excel 365 (Windows 11), VBA 7.1 — última verificación el 18/08/2026.

Guías relacionadas: VBA StatusBar · VBA DoEvents · VBA ScreenUpdating · VBA On Error · VBA MsgBox