Macro - ejecutar según contenido de celda

18/03/2005 - 19:51 por Mbaeijhapa | Informe spam
Hola amigos,
Tengo dos macros en una misma planilla. Quisiera saber como puedo hacer para
ejecutar una u otra conforme al resultado de una celda (si la celda dice "SI"
que se ejecute Macro1, si dice "NO" que se ejecute Macro2.
Gracias.

Mbaeijhapa.

Preguntas similare

Leer las respuestas

#11 Mbaeijhapa
19/03/2005 - 21:55 | Informe spam
A que te refieres cuando dices "fichero" ?, te refieres al "archivo" ?
Si es el "archivo" a q te refieres, como hago para enviarte ?
Perdona mi ignorancia.
En realidad no tengo tanta prisa, pero si lo puedo resolver cuanto antes
mejor.

Un abrazo.
Mbaeijhapa.


"KL" escribió:

Hmm, a mi funcionan a la perfeccion. ?Puedes enviarme tu fichero para ahorar
tiempo dado que te corre prisa?

KL

"Mbaeijhapa" wrote in message
news:
> KL, disculpa por no responderte con rápidez, pero estaba probando las
> macros.
> Te comento:
> - Las dos macros que tengo funcionan correctamente,
> llamandolas
> individualmente a una o a otra.
> - Los códigos que me has enviado las cree con una macro
> ubicándola en el mismo módulo que las dos anteriores.
> - Tambien hice un nuevo archivo escribiendo las macros de
> ejemplos q me enviaste, (MacroPrincipal, Macro1, Macro2). Las macros 1 y 2
> funcionan indiv idualmente, pero cuando ejecuto la MacroPrincipal, no hace
> nada (tampoco me dá ningún error, lo mismo pasa cuando la utilizo con las
> macros creada por mi).
>
> Creo copiar las instrucciones tal cual como me lo envías pero no funciona.
> Debe haber algo q estoy haciendo mal, pero no me doy cuenta.
> Si puedes probar el ejemplo que me enviaste, te lo agradeceré.
> Gracias. Espero tu comentario.
> Mbaeijhapa.
>
> Sub MacroPrincipal()
> '
> Select Case UCase(ActiveSheet.Range("A1").Value)
> Case "Si": Call [Macro1]
> Case "No": Call [Macro2]
> End Select
> End Sub
>
>
> Sub Macro1()
> '
> MsgBox "Acceso Encendido"
> End Sub
>
> Sub Macro2()
>
> MsgBox "Acceso denegado"
>
> End Sub
>
>
>
> "KL" escribió:
>
>> me he olividado de la cuarta causa posible - que alguno de los macros
>> (o
>> ambos) que llamas no funcione bien
>>
>>
>> Un saludo,
>> KL
>>
>> "KL" wrote in message
>> news:%
>> > Entonces el problema puede tener tres posibles causas:
>> >
>> > 1) que la celda [A1] de la HOJA ACTIVA no contiene ninguno de los
>> > valores
>> > esperados o los tiene mal puestos (p.ej. con espacios)
>> >
>> > 2) que las otras macros se encuentren en los modulos de hoja,
>> > formulario o
>> > libro q no son desde donde los llamas. Para que los macros puedan ser
>> > llamados por otro macro deben estar en un modulo normal (p.ej. Modulo1)
>> > y
>> > no ser Private Sub, o bien estar en el mismo modulo de clase (hoja,
>> > formulario o libro) que el macro que los llama.
>> >
>> > 3) que esperes q el macro se dispare solo al cambiar los valores en las
>> > celdas. Si eso es lo q quieres tendras q asignar tu macro a algun
>> > evento.
>> > Lo mas logico seria depositar el codigo dentro del evento
>> > Worksheet_Change
>> > de la hoja que contiene la celda con SI o NO. O sea:
>> >
>> > Private Sub Worksheet_Change(ByVal Target As Range)
>> > Select Case UCase(ActiveSheet.Range("A1").Value)
>> > Case "SI": Call Macro1
>> > Case "NO": Call Macro2
>> > End Select
>> > End Sub
>> >
>> > Saludos,
>> > KL
>> >
>> > "Mbaeijhapa" wrote in message
>> > news:
>> >> KL, complemento mi nota,
>> >> En lugar de Macro1 puse "Si_Dis" (nombre de una de las macros)
>> >> Y en lugar de Macro2 puse "No_Dis" (nombre de la otra macro)
>> >> Se entiende ?
>> >> Gracias.
>> >> Mbaeijhapa.
>> >>
>> >>
>> >>
>> >> "KL" escribió:
>> >>
>> >>> Hola Mbaeijhapa,
>> >>>
>> >>> Select Case UCase(ActiveSheet.Range("A1").Value)
>> >>> Case "SI": Call Macro1
>> >>> Case "NO": Call Macro2
>> >>> End Select
>> >>>
>> >>> donde Macro1 y Macro2 son los nombres de los macros a llamar (sin los
>> >>> parentesis).
>> >>>
>> >>> Saludos,
>> >>> KL
>> >>>
>> >>> "Mbaeijhapa" wrote in message
>> >>> news:
>> >>> > Hola amigos,
>> >>> > Tengo dos macros en una misma planilla. Quisiera saber como puedo
>> >>> > hacer
>> >>> > para
>> >>> > ejecutar una u otra conforme al resultado de una celda (si la celda
>> >>> > dice
>> >>> > "SI"
>> >>> > que se ejecute Macro1, si dice "NO" que se ejecute Macro2.
>> >>> > Gracias.
>> >>> >
>> >>> > Mbaeijhapa.
>> >>> >
>> >>>
>> >>>
>> >>>
>> >
>> >
>>
>>
>>



Respuesta Responder a este mensaje
#12 Mbaeijhapa
19/03/2005 - 22:05 | Informe spam
Tanto los acentos, espacios, mayúsculas como minúsculas, los tengo muy
presente. No es por ahí el error.
Además, como te comente anteriormente. Cree un archivo con el ejemplo q me
enviaste, y tampoco me funciona la MacroPrincipal; las Mcros 1 y 2, funcionan
bien individualmente pero ejecutando la Principal no funcionan (mejor dicho
"no la llaman").

Mbaeijhapa.

"KL" escribió:

Si introduces Sí (con acento) - ese puede ser el problema el macro esta
escrito para Si sin acento.

KL


"Mbaeijhapa" wrote in message
news:
> KL, disculpa por no responderte con rápidez, pero estaba probando las
> macros.
> Te comento:
> - Las dos macros que tengo funcionan correctamente,
> llamandolas
> individualmente a una o a otra.
> - Los códigos que me has enviado las cree con una macro
> ubicándola en el mismo módulo que las dos anteriores.
> - Tambien hice un nuevo archivo escribiendo las macros de
> ejemplos q me enviaste, (MacroPrincipal, Macro1, Macro2). Las macros 1 y 2
> funcionan indiv idualmente, pero cuando ejecuto la MacroPrincipal, no hace
> nada (tampoco me dá ningún error, lo mismo pasa cuando la utilizo con las
> macros creada por mi).
>
> Creo copiar las instrucciones tal cual como me lo envías pero no funciona.
> Debe haber algo q estoy haciendo mal, pero no me doy cuenta.
> Si puedes probar el ejemplo que me enviaste, te lo agradeceré.
> Gracias. Espero tu comentario.
> Mbaeijhapa.
>
> Sub MacroPrincipal()
> '
> Select Case UCase(ActiveSheet.Range("A1").Value)
> Case "Si": Call [Macro1]
> Case "No": Call [Macro2]
> End Select
> End Sub
>
>
> Sub Macro1()
> '
> MsgBox "Acceso Encendido"
> End Sub
>
> Sub Macro2()
>
> MsgBox "Acceso denegado"
>
> End Sub
>
>
>
> "KL" escribió:
>
>> me he olividado de la cuarta causa posible - que alguno de los macros
>> (o
>> ambos) que llamas no funcione bien
>>
>>
>> Un saludo,
>> KL
>>
>> "KL" wrote in message
>> news:%
>> > Entonces el problema puede tener tres posibles causas:
>> >
>> > 1) que la celda [A1] de la HOJA ACTIVA no contiene ninguno de los
>> > valores
>> > esperados o los tiene mal puestos (p.ej. con espacios)
>> >
>> > 2) que las otras macros se encuentren en los modulos de hoja,
>> > formulario o
>> > libro q no son desde donde los llamas. Para que los macros puedan ser
>> > llamados por otro macro deben estar en un modulo normal (p.ej. Modulo1)
>> > y
>> > no ser Private Sub, o bien estar en el mismo modulo de clase (hoja,
>> > formulario o libro) que el macro que los llama.
>> >
>> > 3) que esperes q el macro se dispare solo al cambiar los valores en las
>> > celdas. Si eso es lo q quieres tendras q asignar tu macro a algun
>> > evento.
>> > Lo mas logico seria depositar el codigo dentro del evento
>> > Worksheet_Change
>> > de la hoja que contiene la celda con SI o NO. O sea:
>> >
>> > Private Sub Worksheet_Change(ByVal Target As Range)
>> > Select Case UCase(ActiveSheet.Range("A1").Value)
>> > Case "SI": Call Macro1
>> > Case "NO": Call Macro2
>> > End Select
>> > End Sub
>> >
>> > Saludos,
>> > KL
>> >
>> > "Mbaeijhapa" wrote in message
>> > news:
>> >> KL, complemento mi nota,
>> >> En lugar de Macro1 puse "Si_Dis" (nombre de una de las macros)
>> >> Y en lugar de Macro2 puse "No_Dis" (nombre de la otra macro)
>> >> Se entiende ?
>> >> Gracias.
>> >> Mbaeijhapa.
>> >>
>> >>
>> >>
>> >> "KL" escribió:
>> >>
>> >>> Hola Mbaeijhapa,
>> >>>
>> >>> Select Case UCase(ActiveSheet.Range("A1").Value)
>> >>> Case "SI": Call Macro1
>> >>> Case "NO": Call Macro2
>> >>> End Select
>> >>>
>> >>> donde Macro1 y Macro2 son los nombres de los macros a llamar (sin los
>> >>> parentesis).
>> >>>
>> >>> Saludos,
>> >>> KL
>> >>>
>> >>> "Mbaeijhapa" wrote in message
>> >>> news:
>> >>> > Hola amigos,
>> >>> > Tengo dos macros en una misma planilla. Quisiera saber como puedo
>> >>> > hacer
>> >>> > para
>> >>> > ejecutar una u otra conforme al resultado de una celda (si la celda
>> >>> > dice
>> >>> > "SI"
>> >>> > que se ejecute Macro1, si dice "NO" que se ejecute Macro2.
>> >>> > Gracias.
>> >>> >
>> >>> > Mbaeijhapa.
>> >>> >
>> >>>
>> >>>
>> >>>
>> >
>> >
>>
>>
>>



Respuesta Responder a este mensaje
#13 KL
19/03/2005 - 23:05 | Informe spam
fichero=archivo.

mi direccion de correo es quitando NOSPAm
y PLEASE.

KL

"Mbaeijhapa" wrote in message
news:
A que te refieres cuando dices "fichero" ?, te refieres al "archivo" ?
Si es el "archivo" a q te refieres, como hago para enviarte ?
Perdona mi ignorancia.
En realidad no tengo tanta prisa, pero si lo puedo resolver cuanto antes
mejor.

Un abrazo.
Mbaeijhapa.


"KL" escribió:

Hmm, a mi funcionan a la perfeccion. ?Puedes enviarme tu fichero para
ahorar
tiempo dado que te corre prisa?

KL

"Mbaeijhapa" wrote in message
news:
> KL, disculpa por no responderte con rápidez, pero estaba probando las
> macros.
> Te comento:
> - Las dos macros que tengo funcionan correctamente,
> llamandolas
> individualmente a una o a otra.
> - Los códigos que me has enviado las cree con una macro
> ubicándola en el mismo módulo que las dos anteriores.
> - Tambien hice un nuevo archivo escribiendo las macros de
> ejemplos q me enviaste, (MacroPrincipal, Macro1, Macro2). Las macros 1
> y 2
> funcionan indiv idualmente, pero cuando ejecuto la MacroPrincipal, no
> hace
> nada (tampoco me dá ningún error, lo mismo pasa cuando la utilizo con
> las
> macros creada por mi).
>
> Creo copiar las instrucciones tal cual como me lo envías pero no
> funciona.
> Debe haber algo q estoy haciendo mal, pero no me doy cuenta.
> Si puedes probar el ejemplo que me enviaste, te lo agradeceré.
> Gracias. Espero tu comentario.
> Mbaeijhapa.
>
> Sub MacroPrincipal()
> '
> Select Case UCase(ActiveSheet.Range("A1").Value)
> Case "Si": Call [Macro1]
> Case "No": Call [Macro2]
> End Select
> End Sub
>
>
> Sub Macro1()
> '
> MsgBox "Acceso Encendido"
> End Sub
>
> Sub Macro2()
>
> MsgBox "Acceso denegado"
>
> End Sub
>
>
>
> "KL" escribió:
>
>> me he olividado de la cuarta causa posible - que alguno de los
>> macros
>> (o
>> ambos) que llamas no funcione bien
>>
>>
>> Un saludo,
>> KL
>>
>> "KL" wrote in message
>> news:%
>> > Entonces el problema puede tener tres posibles causas:
>> >
>> > 1) que la celda [A1] de la HOJA ACTIVA no contiene ninguno de los
>> > valores
>> > esperados o los tiene mal puestos (p.ej. con espacios)
>> >
>> > 2) que las otras macros se encuentren en los modulos de hoja,
>> > formulario o
>> > libro q no son desde donde los llamas. Para que los macros puedan
>> > ser
>> > llamados por otro macro deben estar en un modulo normal (p.ej.
>> > Modulo1)
>> > y
>> > no ser Private Sub, o bien estar en el mismo modulo de clase (hoja,
>> > formulario o libro) que el macro que los llama.
>> >
>> > 3) que esperes q el macro se dispare solo al cambiar los valores en
>> > las
>> > celdas. Si eso es lo q quieres tendras q asignar tu macro a algun
>> > evento.
>> > Lo mas logico seria depositar el codigo dentro del evento
>> > Worksheet_Change
>> > de la hoja que contiene la celda con SI o NO. O sea:
>> >
>> > Private Sub Worksheet_Change(ByVal Target As Range)
>> > Select Case UCase(ActiveSheet.Range("A1").Value)
>> > Case "SI": Call Macro1
>> > Case "NO": Call Macro2
>> > End Select
>> > End Sub
>> >
>> > Saludos,
>> > KL
>> >
>> > "Mbaeijhapa" wrote in message
>> > news:
>> >> KL, complemento mi nota,
>> >> En lugar de Macro1 puse "Si_Dis" (nombre de una de las macros)
>> >> Y en lugar de Macro2 puse "No_Dis" (nombre de la otra macro)
>> >> Se entiende ?
>> >> Gracias.
>> >> Mbaeijhapa.
>> >>
>> >>
>> >>
>> >> "KL" escribió:
>> >>
>> >>> Hola Mbaeijhapa,
>> >>>
>> >>> Select Case UCase(ActiveSheet.Range("A1").Value)
>> >>> Case "SI": Call Macro1
>> >>> Case "NO": Call Macro2
>> >>> End Select
>> >>>
>> >>> donde Macro1 y Macro2 son los nombres de los macros a llamar (sin
>> >>> los
>> >>> parentesis).
>> >>>
>> >>> Saludos,
>> >>> KL
>> >>>
>> >>> "Mbaeijhapa" wrote in
>> >>> message
>> >>> news:
>> >>> > Hola amigos,
>> >>> > Tengo dos macros en una misma planilla. Quisiera saber como
>> >>> > puedo
>> >>> > hacer
>> >>> > para
>> >>> > ejecutar una u otra conforme al resultado de una celda (si la
>> >>> > celda
>> >>> > dice
>> >>> > "SI"
>> >>> > que se ejecute Macro1, si dice "NO" que se ejecute Macro2.
>> >>> > Gracias.
>> >>> >
>> >>> > Mbaeijhapa.
>> >>> >
>> >>>
>> >>>
>> >>>
>> >
>> >
>>
>>
>>



Respuesta Responder a este mensaje
#14 KL
20/03/2005 - 00:25 | Informe spam
Tanto los acentos, espacios, mayúsculas como minúsculas, los tengo muy
presente. No es por ahí el error.



Precisamente mayúsculas como minúsculas no importan porque para eso uso la
funcion UCase y las opciones en mayusculas.

Además, como te comente anteriormente. Cree un archivo con el ejemplo q me
enviaste, y tampoco me funciona la MacroPrincipal; las Mcros 1 y 2,
funcionan
bien individualmente pero ejecutando la Principal no funcionan (mejor
dicho
"no la llaman").



Todo apunta a que es una de dos: o la hoja activa no es la que crees, o la
celda donde pones SI/NO no es A1. Para comprobarlo puedes usar el siguiente
macro colocandolo en un modulo normal (no de hoja o libro) del mismo libro
que los demas:

Sub Test()
For Each wb In Application.Workbooks
For Each s In wb.Worksheets
If UCase(s.Range("A1").Value) = "SI" Or _
UCase(s.Range("A1").Value) = "NO" Then
Libro = wb.Name
Hoja = s.Name
GoTo Reconocer
Exit For
End If
Next s
Next wb
MsgBox "No existe libro abierto que tenga SI o NO" & Chr(13) _
& " en la celda A1 de alguna de sus hojas."
Exit Sub

Reconocer:
If Hoja = ActiveSheet.Name And Libro = ActiveSheet.Parent.Name Then
MsgBox "Esta todo correcto."
Else
With ActiveSheet
MsgBox "El valor de la celda A1 de la hoja """ _
& UCase(.Name) & """ que esta activa es: """ _
& .Range("A1").Value & """" & Chr(13) & Chr(13) _
& "Probablemente lo que buscas se encuentra " _
& Chr(13) & "en el libro """ & wb.Name _
& """, hoja """ & s.Name & """"

End With
End If
End Sub
Respuesta Responder a este mensaje
#15 Mbaeijhapa
20/03/2005 - 06:23 | Informe spam
Hola KL,
Estuve probando con otrás instrucciones y aparentemente funciona bien con el
siguiente:

Sub aaa()
Range("A1").Select
If ActiveCell = "Si" Then Si_Dis Else No_Dis
End Sub

Las macros que quiero que se ejecuten si la celda "A1" = "Si" o "No", son
"Si_Dis" o "No_Dis" respectivamente, y parece q con esta instrucciión
funciona bien.
Me gustaría que me dés tu opinión al respecto. No quisiera tener alguna
sorpresa en el futuro.
Muchas gracias.
Espero tu respuesta.

Mbaeijhapa.

"KL" escribió:

> Tanto los acentos, espacios, mayúsculas como minúsculas, los tengo muy
> presente. No es por ahí el error.

Precisamente mayúsculas como minúsculas no importan porque para eso uso la
funcion UCase y las opciones en mayusculas.

> Además, como te comente anteriormente. Cree un archivo con el ejemplo q me
> enviaste, y tampoco me funciona la MacroPrincipal; las Mcros 1 y 2,
> funcionan
> bien individualmente pero ejecutando la Principal no funcionan (mejor
> dicho
> "no la llaman").

Todo apunta a que es una de dos: o la hoja activa no es la que crees, o la
celda donde pones SI/NO no es A1. Para comprobarlo puedes usar el siguiente
macro colocandolo en un modulo normal (no de hoja o libro) del mismo libro
que los demas:

Sub Test()
For Each wb In Application.Workbooks
For Each s In wb.Worksheets
If UCase(s.Range("A1").Value) = "SI" Or _
UCase(s.Range("A1").Value) = "NO" Then
Libro = wb.Name
Hoja = s.Name
GoTo Reconocer
Exit For
End If
Next s
Next wb
MsgBox "No existe libro abierto que tenga SI o NO" & Chr(13) _
& " en la celda A1 de alguna de sus hojas."
Exit Sub

Reconocer:
If Hoja = ActiveSheet.Name And Libro = ActiveSheet.Parent.Name Then
MsgBox "Esta todo correcto."
Else
With ActiveSheet
MsgBox "El valor de la celda A1 de la hoja """ _
& UCase(.Name) & """ que esta activa es: """ _
& .Range("A1").Value & """" & Chr(13) & Chr(13) _
& "Probablemente lo que buscas se encuentra " _
& Chr(13) & "en el libro """ & wb.Name _
& """, hoja """ & s.Name & """"

End With
End If
End Sub



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida