Ejecutar macro desde lista desplegable!

He observado tus respuestas y creo que lo que pido es sencillo... Lo que necesito es que se ejecute mi macro al seleccionar un "dato" de una lista desplegable... Leí que hay que empezar por el código Private Sub Worksheet_SelectionChange(ByVal Target As Range)... En conclusión lo que quiero lograr es que al seleccionar un dato de mi lista desplegable se ejecute la macro y a partir de ello me complete automáticamente los campos (celdas) referidos al dato elegido.. Es para completar una tabla o un informe... Creo que esto no se entiende mucho.. Así que espero poder mandarle el archivo explicando detalladamente...

1 respuesta

Respuesta
2
Con el buscador o entre mis respuestas, encontrarás muchas consultas para esto, solo cambiá el evento.
No es al seleccionar la celda sino al cambiarla:
Private Sub Worksheet_Change(ByVal Target As Range)
Porque cuando seleccionás algo del desplegable luego la celda toma otro valor, el valor que seleccionaste.
Algunos ejemplos aquí:
http://www.todoexpertos.com/mitodoexpertos/expert/questions/view/2585862/valor-condicional
http://www.todoexpertos.com/mitodoexpertos/expert/questions/view/2583352/messagebox-al-digitar-no
Target. Offset(fila, col) indica el desplazamiento desde la celda cambiada.
Una vez que desarrolles la rutina, si te da error escribime cómo te quedó y la línea errada.
Hola elsa buen día!... desde algunos tipos similares que observe utilice el siguiente código:
Private Sub Worksheet_Change(ByVal Target As Range)
'el equipo al cual se hace la referencia (FILTRO 1)
If Target.Address = "$E$20" Then
If Range("E20") = "FILTRO 1" Then
    Range("E18").Select
    ActiveCell.FormulaR1C1 = "=R[156]C[28]"
    Range("E19").Select
    Range("E22").Select
    ActiveCell.FormulaR1C1 = "=R[147]C[39]"
    Range("E23").Select
    Range("E24").Select
    ActiveCell.FormulaR1C1 = "='UL 301 '!R[-15]C"
    Range("E26").Select
    ActiveCell.FormulaR1C1 = "='UL 301 '!R[-17]C[1]"
    Range("E28").Select
    ActiveCell.FormulaR1C1 = "='UL 301 '!R[-19]C[2]"
    Range("E29").Select
End If
Cuando ejecuto desde la lista funciona... Lo que deseo agregar ademas es que para habilitar ese código... previamente la orden debe venir de otra lista desplegable en la cuan son 2 opciones distintas, es decir si selecciono la "1" me habite el código (FILTRO 1)... Creo que seria con GoTo pero no se como escribirlo...(la lista desp. 1,2 esta en "E12")... Si puedes orientar seria de gran ayuda... muchas gracias.
No sé si te estoy entendiendo bien, pero si de 1 primer desplegable, seleccionás 1 y en ese caso 'enviás' FILTRO1 al 2do desplegable, me pregunto:
- ¿Por qué no ejecutás todas las instrucciones desde tu primer desplegable?
Es decir que , por ej, si A20 = 1 entonces
Range("E20") = FILTRO1  (no sé si hace falta mostrar esto)
Range("E18").FormulaR1C1 = "=R[156]C[28]"
Y así con todas.
Pruébalo y comentame o aclarame un poco más la situación. Si hay una macro anterior que se ejecuta con el 1er desplegable escribimela aquí.
Hola elsa... perdón por no expresarme correctamente, lo que necesito seria más o menos que a partir de una primer macro con lista desplegable de dos opciones (localidad1, localidad2), me habilite la macro correspondiente a cada una... tratare de explicarlo en el ejemplo:
'si elijo "localidad 1" me habita la macro correspondiente a localidad 1
'si elijo "localidad 2" que salte a la macro de localidad 2
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$12" Then
if Range("E12") = "Localidad 1" then (o GoTo esa es mi duda)
(o la otra opcion: "Localidad 2")  
' localidad 1
If Target.Address = "$E$20" Then
If Range("E20") = "FILTRO 1" Then
    Range("E18").Select
    ...........................
' localidad 2
If Target.Address = "$E$20" Then
If Range("E20") = "FILTRO 1" Then
    Range("E18").Select
........................................
Aclaración: los equipos de la lista desplegable ("E20") son los mismos para ambas localidades, PERO VARÍAN EN SUS DEMÁS DATOS, por eso es que se separan en dos localidades.
Intente hacerlo utilizando nuevamente el evento Private Sub Worksheet_Change(ByVal Target As Range), pero al parecer no se puede volver a utilizar, es decir, lo que intente fue:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$12" Then
if Range("E12") = "Localidad 1" then (o GoTo esa es mi duda) ' necesito que salte a la macro localidad 1....
End if
End sub
' localidad 1
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$20" Then
If Range("E20") = "FILTRO 1" Then
    Range("E18").Select
Espero que se entienda un poco mejor... y así me pueda ayudar para cololar la función correspondiente... gracias por su tiempo.
Creo que es esto lo que necesitas:
Private Sub Worksheet_Change(ByVal Target As Range)
'controla si el cambio es en E12 y si contenido es Localidad 1 o 2
If Target.Address = "$E$12" Then
    If Range("E12") = "Localidad 1" Then
        Call Macro_Localidad1
    Else
        Call Macro_Localidad2
    End If
'controla si el cambio es en E20 y si contenido es FILTRO1 o 2
ElseIf Target.Address = "$E$20" Then
    If Range("E20") = "FILTRO1" Then
        Call Macro_Filtro1
    Else
        Call Macro_Filtro2
    End If
End If
End Sub
No podes tener + de 1 rutina Worksheet_Change, pero dentro de la misma podes controlar varias celdas o rangos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas