TL;DR —
Application.DisplayAlerts = Falsele 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 = Falseno 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:
- 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.
- 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.
DisplayAlertsva 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
