Hojas de cálculo en Excel - página principal

Omitir los avisos al ejecutar un macro

A veces, cuando creamos un macro, y deberemos realizar una serie de operaciones, Excel nos avisa a través de sus propios mensajes de aviso (no a través de los Msgbox que nosotros hayamos podido crear en el macro), para saber si realmente deseamos hacer eso o no.

Para evitar que nos salgan esos avisos, y que el macro se ejecute sin preguntar, ni confirmar nada, simplemente tendremos que añadir esta línea a nuestro macro:


'Omitimos los mensajes de aviso
Application.DisplayAlerts = False

Hay que ir con cuidado a la hora de utilizar esa línea, porque puede llegar a ser peligrosa si no sabemos bien lo que estamos haciendo. Por ejemplo, si a través de un macro grabamos el fichero con el que estamos trabajando, y le ponemos el nombre de otro fichero ya existente (damos por hecho que en nuestro macro utilizamos esa línea de código para omitir los avisos), no nos aparecerá el famoso aviso de Excel donde nos informa que ya tenemos un fichero con ese mismo nombre, por si queremos cancelar la operación, o por si queremos sobrescribirlo.

Antes de utilizar esa línea, tenemos que estar muy seguros de lo que hacemos. Si hemos de utilizarla, es preferible incluirla una vez tengamos nuestro macro completamente probado y funcionando perfectamente.



17 comentarios:

pacomegia dijo...

Muy bueno este blog.
Ánimo con el Excel.
Con tu permiso voy a enlazar al contenido de tu sitio desde el mío, necesitomas.com

un saludo.

Javier Marco dijo...

Muchas gracias.

Veo que tienes un interesante libro sobre excel. Por el vistazo que le he echado al índice, parece altamente recomendable.

Salu2

Anónimo dijo...

gracias de mucha ayuda esto, tengo una consulta, tengo una macro que quiero que se ejecute dependiedo del contenio de una celda, por ej: si la celda tiene valor 1 que si se ejecute, pero si tiene valor 2 que no se ejecute, como puedo hacer que me verifique antes de correrla?

Javier Marco dijo...

Copia este macro de ejemplo, en la Hoja1 (desde VBA), no dentro de un módulo, sino dentro de la hoja1:

Private Sub Worksheet_Change(ByVal Target As Range)
'Si ha errores, que continúe
On Error Resume Next
'Si cambiamos el dato de la celda A1
'llamamos al macro mensaje
celda = "A1:A1"
If Not Application.Intersect(ActiveCell, Range(celda)) Is Nothing Then mostrar_mensaje
End Sub

Ahora coloca este macro en un módulo:

Sub mostrar_mensaje()
respuesta = MsgBox("Has cambiado la celda A1")
End Sub

Saludos

Anónimo dijo...

muchas gracias por la pronta respuesta, pero no estoy seguro que sea eso lo que ocupo, seria mas bien como una condicion en la macro, por ej: si A1 = "" que la macro no termine de ejecutarse, pero si el A1 tiene algun valor que si se ejecute, seria como verificar antes de ejecutarse,

muchas gracias

Javier Marco dijo...

Pues puedes usar el macro llamado Auto_open() que se ejecuta al abrir el libro. Pon un condicional dentro, que mire el valor de la celda en cuestión, y entonces ejecutas lo que haya dentro del condicional.

En este blog tienes más info sobre el macro Auto_open().

Saludos

Anónimo dijo...

Javier gracias por tu tiempo, pero creo que no me he explicado bien, la macro que tengo hace lo siguiente

Sheets("general").Range("B7").CurrentRegion.Copy

Sheets("base de datos").Range("B65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlValues

la base de datos que tengo la alimento por medio de un formulario personalizado, lo que quiero es que la macro solo se pueda ejecutar si todos los campos del formulario esten llenos.

de nuevo, muchas gracias

Javier Marco dijo...

Si tienes un formulario como dices, seguramente tendrás un botón de "enviar" o algo así, para ejecutar el macro, ¿no?. Pues antes de ejecutar el macro, dentro del código de ese botón le pones algo como esto:

if trim(Textbox1)="" then no_ejecutar = true

Así con cada input de texto... Luego, antes de ejecutar el macro, si ves que la variable no_ejecutar es igual a true, pues muestras un msgbox informando de que falta algún campo por rellenar, y sino, pues ejecutas el macro.

Saludos.

Anónimo dijo...

buenos dias, ahora si eso mismo era lo que ocupada, pero como lo aplicaria a un Cuadro de edicion o un editbox

gracias

Javier Marco dijo...

¿Un textbox no es lo mismo que un editbox?.

Tan solo tienes que cambiar el nombre del control (en las propiedades del control te aparece el nombre). Yo he supuesto que se llamaba Textbox1.

Anónimo dijo...

buenas tardes, yo aqui de nuevo con el mismo problema, aplique el codigo que me dijiste a la macro pero la macro se sigue ejecutando aunque el cuadro de edicion este vacio, hice la prueba de ponerle cualquier nombre al cuadro de edicion en el codigo y la macro igual se ejecuta, nisiquiera me sale algun mensaje de error, nose que estare haciendo mal, muchas gracias!!

Anónimo dijo...

Hola:
Tengo un formulario que omite las barras de excel para que no parezca una aplicacin de excel, pero si tengo varias pantallas abiertas, se queda detras de todas. ¿Como puedo hacer para que sea la visible?.
Gracias.

Saludos.

Anónimo dijo...

Fantastico, enhorabuena

moix-Uhx dijo...

Buenas tardes Javier Marco.
Excelente blog, felicidades por tan fenomenal trabajo.
He usado la línea que comentas en un codigo que me por algun motivo me salia un mensaje (lo cual no debia ocurrir) y con ello he logrado que el codigo llegue a buen termino, sin embargo he notado algo extraño en Excel a partir de ese momento (pudiera tratarse de coincidencia) y es que cuando quiero abrir el libro guardado previamente mediante dicho codigo Xl marca error con la opcion de enviar reporte y recuperar archivos, alguna idea de que pudiera estar ocurriendo, si gustas puedo enviarte el codigo para que si te es posible le des una revisada y veas si hay algo malo en mi codigo que pudiera estar provocando este comportamiento anormal de mi Xl.
Uso Xl 2007.

spok dijo...

=ENTERO((E6-D6)*24) &":"& MINUTO((E6-D6-ENTERO(E6-D6)))
Donde D6 es la hora final y E6 la hora de inicio.
Salu2

Anónimo dijo...

Hola, tu blog super interesante. No soy muy experta en esto de las macros y lo haces muy fácil. Felicidades!Mi consulta es: Necesito crear una macro que me mande una alerta, 10 días antes de la fecha de vencimiento de la entrega de material, columna D (exactamente 10 días antes de la fecha de cada fila, ya que son diferentes) y otra en la que me alerte 10 días antes de la fecha en que el cliente me pagará la factura, columna F. Y al mismo tiempo enviar esta información por correo a la persona encargada. Es posible? Podrías por favor, ayudarme? Tal vez es mucho pedir, pero creo que excel es una maravilla. Mil gracias, te envio cordiales saludos.

Pipe dijo...

Hola Javier. ¿Cómo hago para que en una hoja bloqueada las tablas que tengo allí se expandan automáticamente cuando quiera agregar datos a alguna de ellas?
Mil gracias.