Desearía saber como se puede llamar a una macro si se cumple una condición. Con la fórmula SI, en el campo verdadero o falso no he sabido hacerlo... A lo mejor es que no se puede, si es el caso me podrías poner un ejemplo sencillo de la macro que lo realiza.
Respuesta de fejoal
1
1
fejoal, Por falta de tiempo para responder como me gusta hacerlo suspendo...
Visual Basic permite que los macros se ejecuten a partir de "Eventos" (aparte de poder hacerlo manualmente) Activando el editor de VBA (Alt + F11), en cada hoja o en "ThisWorkbook", encontrarás dos menúes descolgables en la parte superior derecha. Elige la segunda opción del primero y en el que está a la derecha te mostrará los eventos a los que puedes asociar una o varias macros. Así, en la hoja donde tienes la fórmula condicional podrías elegir el evento "Change". Así cada vez que la hoja cambie, evaluará si tiene que disparar la macro. Cuando eliges -del menú a la derecha- "Change", verás escrito automáticamente esto: Private Sub Worksheet_Change(ByVal Target As Excel.Range) End Sub Entre ambas lineas coloca un condicional de forma tal que si el valor de la celda es verdadero esjecute la macro; si no, que no haga nada. Supon que en la celda B8, colocaste una fórmula como esta: =SI(A4>1042002,1,0) Tu código sería, entonces, algo así como: Private Sub Worksheet_Change(ByVal Target As Excel.Range) ActiveSheet.Range("B8").Calculate If B8 = 1 Then '<pon aquí el nombre de la macro que quieres que se ejecute> TUMACRO End If End Sub Obviamente, puedes colocar el condicional directamente en la macro sin utilizar la fórmula en la hoja Es decir, en lugar de: If B8 = 1 Then puedes colocar: If A4>1042002 Then
Hola y gracias Fernando, Primero no me hace falta que se recalcule la oja cada vez que ingreso un nuevo valor, (igualmente no conocía esa opción y seguro que me servirá más adelante), mi problema es mucho más sencillo, sólo quiero que se cumpla esto: Sub pregunta() ' ' pregunta Macro ' Macro grabada el 12/04/2002 por Daniel Tortosa ' Dim SEGURO SEGURO = InputBox("PON !definitivo! SI ESTE DATO NO SERÁ MODIFICADO") Range("C64").Value = SEGURO ActiveSheet.Range("C64").Calculate If C64 = DEFINITIVO Then NENE End If ' End Sub He hecho esto y siempre me ejecuta la macro, ¿dónde está el problema? PD: espero que no duela mucho a la vista esa macro... Un saludo
Si en vez de poner que c64=definitivo pongo c64="valor numérico" hace lo contrario, nunca me ejecutala macro... ¿Por qué? Pues nada más... Otro saludo.
OK, ahora entiendo, el llamado a una macro que solicitabas es *dentro* de otra macro. Como en tu primera pregunta no lo aclarabas y ademas hablabas de un *fórmula* SI, pensé que se trataba de manejarlo desde la misma hoja. Respecto a cómo lo resolviste en tu código, habría un par de consideraciones que hacerle. Obviamente, asumo que existe un Sub NENE() en el mismo proyecto. El problema está en C64 = DEFINITIVO C64 no es una variable, ni algo que se entienda como una referencia a una celda. Adicionalmente, así como lo escribiste VBA intentará buscar una variable llamada DEFINITIVO, cuando -en realidad- debería buscar la palabra "DEFINITIVO". (Tomada del Input box, pasada a una variable y, de allí a la hoja) Faltan las comillas. Personalmente, usaría lo siguiente: Sub pregunta() ' Dim SEGURO as String SEGURO = InputBox("PON !definitivo! SI ESTE DATO NO SERÁ MODIFICADO") If SEGURO <> "" ActiveSheet.Range("C64").Value = Ucase(Trim(SEGURO)) End If If ActiveSheet.Range("C64").Value = "DEFINITIVO" Then NENE End If End Sub Notarás que le agregué un par de controles. Para el caso de que no se ingrese nada en el input box y una corrección a la entradas de datos para que siempre la vuelque a la hoja en mayúsculas y sin espacios excedentes. Efectivamente, al ser sólo un texto no es necesario un recalculo de la hoja-. Eliminé esa línea. Pruébalo y comentame
Después de If SEGURO <> "", no funcionaba si no ponía then (no es una crítica, ya va bien tener que investigar). En fin gracias y perfecto.
1 comentario
estimados su ayuda tengo la siguiente macroPrivate Sub Worksheet_SelectionChange(ByVal target As Range)If target.Column = 12 ThenSheets("seguimiento").Cells(target.Row, 13) = NowEnd If End subme funciona ..el problema es q solo quiero q se active si la celdas de la column 12 sean opciones de una lista despelgable (llamada telefónicaMensaje de whatsapp E -mail Carta de cobranza Cliente visito C&C Cita con el cliente Se visito al cliente Cheque post fechado 1anexo 2anexo 3anexo)porq ahorita con solo tocar la columna en blanco me sigue activando la macro..y quiero condicionarla a a q se active solo cuando en la celda se encuentren esas palabrasayuda por favor!!! - Angel Oswaldo Rivera Ramos
estimados su ayuda tengo la siguiente macroPrivate Sub Worksheet_SelectionChange(ByVal target As Range)If target.Column = 12 ThenSheets("seguimiento").Cells(target.Row, 13) = NowEnd If End subme funciona ..el problema es q solo quiero q se active si la celdas de la column 12 sean opciones de una lista despelgable (llamada telefónicaMensaje de whatsapp E -mail Carta de cobranza Cliente visito C&C Cita con el cliente Se visito al cliente Cheque post fechado 1anexo 2anexo 3anexo)porq ahorita con solo tocar la columna en blanco me sigue activando la macro..y quiero condicionarla a a q se active solo cuando en la celda se encuentren esas palabrasayuda por favor!!! - Angel Oswaldo Rivera Ramos