Llamar macro en condición si.

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.

1 respuesta

Respuesta
1
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.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas