Como puedo hacer que se ejecute una macro después de otra pero condicionada, envío código (muy sencillo) solo quiero saber como

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$J$7" Then
If UCase(Target.Value) = "JUAN" Then
Macro1
ElseIf UCase(Target.Value) = "MARIA" Then
Macro2
End If
End If
End Sub

Sub Macro1()
Range("J15").Value = "He de poner Juan"
Range("A1").Select
End Sub
Sub Macro2()
Range("J15").Value = "He de poner Maria"
Range("A1").Select
End Sub
'Esta macro es super sencilla expresamente, realmente cuando sepa como realizar lo que pregunto irá a
'un código más complejo, pero que con botones funciona perfectamente, solo necesito saber como poder funcionar esto.
'Crearé dos macros números 11 y 12 (tan sencillas como estas) solo para ver como funciona.
'Como veis arriba, se pide un dato en J7,
'Como lo hago para después de ejecutar esta macro, hacer otra pregunta (en hoja Excel)
'Y esperar datos en J9 ?

'O sea, en página Excel, línea 7, pregunto: ¿Nombre? Entro datos en J7 "Juan" o "Maria" (me hace macro 1 o 2)
'Después, linea 9, pregunto: HOMBRE o MUJER ? Entro datos en J9 "Hombre" o "Mujer" (me deberá hacer macro 11 o 12, falta crear)
'Pero no debe hacerlo como formulario que ya esta todo escrito y solo falte rellenar datos,
'sino despues de ejecutar la primera macro, entre datos de la segunda y la ejecute y asi sucesivamente.
'

1 Respuesta

Respuesta
1

¿Osea las macros están separadas y quieres llamar una dentro de la otra? Disculpa si entendí mal, pero eso es lo que logro entender..

Para llamar una macro usas "Call"

Ejemplo:

If bla bla bla then

call Macro1

else

call Macro2

end if

Ya he probado con Call y no va, en las lineas inferiores esta explicado como sigue: (por ejemplo)

en linea 10 debo entrar dato, nombre1, nombre2, nombre3 etc lo que ejecuta macro1, macro2, macro3 etc, esto ya me funciona pero...

si después de que se ejecute esta macro...

linea 11 debo entrar datos "Hombre" o "Mujer" y ejecute otra macro (pendiente de crear)

Pero no este realizado como un sitio en que ya estén las preguntas (de la pagina Excel) escritas 

como un formulario, sino que se ejecute la macro y después proponer otra decisión.

Okay, bueno según entiendo ahora, lo que quieres es una secuencia de sucesos sin tener que involucrar un formulario.. podemos usar Input. Va a necesitar muchas validaciones IF. Te he escrito este código, fíjate:

Sub Secuencia()
nombre:
[J7] = InputBox("Introduzca el nombre", "Nombre de la persona")
If [J7] <> "" Then
    If [J7] = UCase("MARIA") Then
        Call macroMaria
    ElseIf [J7] = UCase("JUAN") Then
        Call macroJuan
    End If
    'ahora vamos con el genero
genero:
    [J9] = InputBox("Introduzca el sexo de la persona", "Genero de la persona")
        If [J9] <> "" Then
            If [J9] = UCase("HOMBRE") Then
                Call macroHombre
            ElseIf [J9] = UCase("MUJER") Then
                Call macroMujer
            End If
        Else
            If MsgBox("Debe introducir el nombre. Desea continuar?", vbYesNo) = vbYes Then
            GoTo genero
            End If
        End If
    'y asi sucesivamente
Else
    If MsgBox("Debe introducir el nombre. Desea continuar?", vbYesNo) = vbYes Then
    GoTo nombre
    End If
End If
End Sub
Sub macroMaria()
MsgBox "Soy Maria!"
End Sub
Sub macroJuan()
MsgBox "Soy Juan"
End Sub
Sub macroHombre()
MsgBox "Soy hombre"
End Sub
Sub macroMujer()
MsgBox "Soy mujer"
End Sub

copia y pega todo eso en un modulo en una hoja a parte o en un libro a parte para que lo pruebes y veas lo que hace, y si es eso lo que necesitas.

¡Gracias!

Perdón por ser tan pesado, ¿no se puede realizar lo mismo pero sin Imputbox ni MsgBox?

Solo con las líneas de la página Excel.

Muchas gracias

Oh osea, solo quieres escribir directamente en la celda y al dar ENTER por ejemplo, ¿qué se ejecuten las correspondientes macros?

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$J$7" Then
    If UCase(Target.Value) = "JUAN" Then
        Call macroJuan
    ElseIf UCase(Target.Value) = "MARIA" Then
        Call macroMaria
    End If
End If
If Target.Address = "$J$9" Then
    If UCase(Target.Value) = "HOMBRE" Then
        Call macroHombre
    ElseIf UCase(Target.Value) = "HOMBRE" Then
        Call macroMujer
    End If
End If
End Sub

Así? Eso debes pegarlo en el modulo de la hoja. Le das click derecho a la pestaña de la hoja y seleccionas "Ver código"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas