Macro Worksheet_Change no funciona más de una vez

Espero me puedan ayudar con lo siguiente: Esta macro me ejecuta otra macro al cambiar el valor de la celda especificada.
1  Sub Worksheet_Change(ByVal Target As Range)
2  Dim rng As Range
3  Set rng = Range("A7")
4  If Intersect(Target, rng) Is Nothing Then Exit Sub
5  Busca_Aleacion1
6  Busca_Vaciado1
7  End Sub
En la línea 5 y 6 especifico los nombres de las macros que se me ejecutan al cambiar el valor de la celda especificada en la línea 3.
Sucede que esta macro no me funciona más de una vez, necesito repetirla varias veces para ejecutar otras macros en la misma hoja pero solo me funciona una sola macro y si le cambio el nombre (Worksheet_Change) no me funciona.
Necesito especificar otra celda que cambiaría de valor, por ejemplo la linea 3 me muestra la celda que va a cambiar, lo que necesito es que otra celda a parte de esta.
Que puedo hacer.

1 respuesta

Respuesta
1
Te ajusto tu rutina para varias celdas, solo tenés que ajustar las referencias y asignarles nbre a las macros.
Te dejé 3 modos de expresar la celda o rango.
La rutina se coloca en el objeto HOJA donde quieras que actue, y empieza con Private Sub.....
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim rng As Range
If Not Intersect(Target, Range("A7")) Is Nothing Then
Busca_Aleacion1
Busca_Vaciado1
ElseIf Target.Address(False, False) = "B5" Then
MsgBox "rango2"
'llamar a las rutinas para este 2do rango
ElseIf Not Intersect(Target, Range("C2:C5")) Is Nothing Then
MsgBox "rango3"
End If
End Sub
Sdos
Elsa
PD) Todo lo que necesitas saber de macros lo encontrarás aquí:
Mil Gracias, muy buena respuesta. Pero sucedió algo:
Resulta que ese cambio de celda es un valor que llega desde un PLC o un dispositivo externo y en la celda siempre hay una fórmula que es la que me toma ese valor desde el PLC, entonces el realidad el valor no cambia, como hago para que esa macro me tome ese valor.?
Si no puede ser automática al cambio de valor en celda, necesitarás un botón a atajo de teclado, y estamos otra vez al inicio.
Si la celda es variable, podrías utilizar la línea 3 para que se ejecute con la celda activa, es decir que seleccionás la celda y ejecutas la macro.
Set rng = activecell.address
Pruébalo y si esto no resuelve tu consulta, describime un poco más cómo son los pasos que intentas realizar.
Sdos
Elsa
Gracias.
La verdad no comprendo bien tu respuesta.
No estoy usando la macro que me mostraste porque encontré otra forma en la cual anido varios IF, pero me sigue apareciendo el mismo problema del valor de la celda que te comenté (por no cambiar el valor de la celda si no que es una fórmula que trae otro valor no me funciona Worksheet_Change).
Gracias.
Vi que trataste de utilizar el evento Calculate, pero descarté esa opción entendiendo que podías tener + de 1 celda calculándose .
Te explico mi idea:
Ya tenías una rutina que funcionaba bien para 1 celda, así comentaste al inicio de tu consulta.
Esta rutina estará seguramente en un módulo para ejecutarse con un botón o atajo de teclado, al momento que vos decidas.
Entonces te sugería, modificar la línea 3 dejanto esta instrucción:
Set rng = ActiveCell.Address
Es decir que seleccionás la celda y ejecutás la rutina.
La línea 4 no necesita evaluar el target porque no estás utilizando el evento Change, pero podrías consultar que no esté vacía:
If activecell = "" Then Exit Sub
Hacé estos 2 cambios y pruébala. Luego seguimos tratandoen base a estos resultados.
Gracias por tu respuesta.
Creo que ya me estas entendiendo mucho más la idea de lo que quiero hacer. La idea es no tener botones y tampoco tener atajos por teclado, por eso vi que la función 'Change no me funciono, ya que me tocaba hacer un cambio manualmente y esa no es la funcionalidad que se desea. Al intentar con la función 'calculate lo probaba manualmente y me funcionaba perfectamente, pero al integrarlo con la captura de datos que entran como fórmula a las celdas desde el dispositivo externo (PLC) se me generaban tantos eventos simultáneos en la función 'calculate que me bloquea de inmediato Excel y por ende no me funcionaba.
En resumen lo que necesito es alguna función que me permita captar los cambios en los datos que llegan externos (que llegan como fórmula) y que se me ejecuten unas secuencias dependiendo de cual sea el dato externo que haya cambiado.
Saludos, espero haber sido claro con mi explicación.
Muchas Gracias por tu atención
Yo creo entender tu problema, quizás vos no estés comprendiendo la dificultad de encontrar un proceso apto.
Resumiendo:
Worksheet_Change: no es apto porque la celda no se actualiza con un ingreso por parte del usuario.
Calculate: no es apto porque se estaría ejecutando ante cualquier celda calculada.
Ejecutar 1 macro con atajo de teclado o botón: no querés
¿Qué nos queda? Poco y nada
¿Cómo se hace la captura de datos?, ¿Con una rutina? Bien, es allí y solo allí donde tendrás que agregar lo que te sea necesario ahora.
Es todo lo que puedo aportar desde aquí entonces.
Sdos
Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas