martes, 14 de agosto de 2007

Ejecutar una macro a condición en Excel

Uno de los visitantes de este pequeño blog, quien se llama "Antonio" solicitó ayuda mediante el presente mensaje:

MacrosNecesito que al pulsar un botón que activa una macro, me aparezca una ventana de advertencia “si ejecuta esta macro perderá los datos actuales”, que aceptando se ejecute la macro y cancelando no la ejecute.

Este mensaje me llamo mucho la atención para lo cual decidí crear el presente artículo ya que además de ofrecerle la ayuda a Antonio, también podría servir para muchas otras personas que a diario trabajan con Excel con hojas de cálculo muy avanzadas y pensando a la vez en la forma de prevenir a usuarios de ejecutar algo que podría traer consecuencias que alteren de alguna manera los datos con que se trabaja.

Lo siguiente funciona combinando cualquier macro que hayamos creado con un poco de código de programación de Visual Basic para Excel.

Cómo ya expliqué en una artículo anterior (Qué son las macros), antes de proceder a insertar el siguiente código debemos de crear la macro que vamos a ejecutar si X condición se da, en este caso mediante la intervención del usuario quien será el que decidirá si se ejecutará la macro o no.

El siguiente código hace que cualquier grupo de celdas que seleccionemos se rellenen de color amarillo.

With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With

Claro está que el código podría ser cualquiera de acuerdo al tipo de macros que ustedes creen, el cual para verlo tendrían que ver el Editor de Visual Basic especificamente en el módulo del libro que la contenga.

Luego para hacer que nos aparezca un mensaje antes de ejecutar cualquier macro tendríamos que hacer uso del siguiente código:

YesNo = MsgBox("Esta macro podria ... seguro que quiere continuar?", vbYesNo + vbCritical, "Advertencia")
Select Case YesNo
Case vbYes
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With

Case vbNo
MsgBox ("Operación cancelada")
End Select

En lo anterior hemos podido ver que se ha añadido una parte de código que hará la evaluación de acuerdo a la respuesta del usuario (Sí o No).
Que sucederá: Cuando el usuario ejecute la macro aparecerá un mensaje que le avisará que ejecutar la macro podría ejecutar X acción, y le presentará dos botones adicionales, Sí y No. Si el usuario presiona Sí las celdas marcadas se rellenarán de color amarillo, de lo contrario aparecerá un mensaje que dirá Operación cancelada, y la macro no se ejecutará.

En el caso anterior, para personalizar este código se debería reemplazar el código marcado anteriormente en negrita, con el código completo de la macro que ustedes hayan creado, y personalizar el mensaje por uno que ustedes quieran.

Finalmente el código completo luciría como el siguiente:

Sub Color()
'
' Color Macro
' Macro grabada el 14/08/2007 por Mario Pérez
'

'
YesNo = MsgBox("Esta macro podria ... seguro que quiere continuar?", vbYesNo + vbCritical, "Advertencia")
Select Case YesNo
Case vbYes
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
Case vbNo
MsgBox ("Operación cancelada")
End Select
'

End Sub

Más explicación podría confundirlos, asi que espero que haya sido fácil de entender. Sólo resta que hagan el procedimiento y vean los resultados para comprender a totalidad este ejemplo.
Antonio, creo que esto es lo que necesitabas saber, espero que te sirva y haya sido de utilidad este artículo para ti y muchas personas más.

11 comentarios

  1. esta informacion era la que estaba buscando, gracias amigo

    ResponderEliminar
  2. Quiero aser un programa que donde visual basic 6 mande informacion a Excel microsoft sin abrir el acribo y manejar las macros que tenga dico archivo de excel.

    ResponderEliminar
  3. Disculpa las molestias no entiendo como colocar una funcion en excel sin tener que abrir el archi de origen me podrias ayudar gracias

    ResponderEliminar
  4. No entendí claramente a que te referías lcl, podrías dar mayores detalles?

    ResponderEliminar
  5. Hola

    Necesito crear un procedimiento con macros que me ayude a reconocer el idioma del sistema operativo y poder asi asignar una varibale dependiedo del idioma.

    Vi esta pagina y me parecio qu ed epronto alguien podria ayudrame a resovler este inconveniente

    mucha gracias

    ResponderEliminar
  6. Buenas tardes necesito que me auxilien quisiera saber si se puede ejecutar una macro en excel sin que se abra el libro solamente que se abra la macro no se si me explique.. de no ser asi que si al darle dobre click al documento donde esta la macro me abra directamente la macro pero que no me muestre el contenido del libro o documento..

    De antemano Muchas gracias

    ResponderEliminar
  7. Hola un saludo tengo que hacer un control de facturas semanal ingresando 7 u 8 facturas diarias con los articulos vendidos restando lo que queda en existencia y a la vez entregar un informe lo quiero hacer en exel pero tengo problemas con los macros ¿me puedes ayudar
    de antemano gracias

    ResponderEliminar
  8. este codigo es buenisimo

    Gracias

    ELOY CRIOLLO

    ResponderEliminar
  9. Muy buen aporte, estaba buscando este dato para hacer las macros en mi programita de contabilidad :lol: :lol: :lol: :lol:

    ResponderEliminar
  10. Estimados tengo una macro que ejecuta una encuesta y guarda informacion de personas , como puedo hacer para que cuando vuelva a ingresar un nombre de una persona que ya existe la macro me avise
    de ante mano gracias por su ayuda.

    ResponderEliminar