Ejecutar macro al cambiar el valor de celda

A ver si alguien me puede ayudar por favor, que me estoy volviendo loca!
Estoy intentando hacer una macro para que se ejecute otra cada vez que cambia la celda A1. El caso es que A1 está formulado, y lo que quiero es que se ejecute la macro cada vez que el resultado de esa fórmula cambie. Os escribo la macro que he preparado, pero sólo me funciona si cambio la celda A1 a mano.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target. Address = "$A$1" Then
If Range("c6"). Value = 0 Then
Range("c8"). Value = Value
Else
Range("c8"). Value = Range("c6"). Value
End If
End Sub
Muchas gracias. Edurne.

1 Respuesta

Respuesta
1
Que te parece si en lugar de monitorear la celda A1 monitoreas las celdas que alimentan la fórmula de esa celda y cuando alguna de ellas cambie re-escribes la fórmula de la celda A1 mediante la MACRO de esa manera lograrías lo demás.
Por Ejemplo:
Private Sub Workbook_SheetChange(ByVal Target As Range)
If Target.Address = "$B$1" Or Target.Address = "$C$1" Or Target.Address = "$D$1" Then
Range("A1").FormulaR1C1 = "=SUM(RC[1]:RC[3])"
ElseIf Target.Address = "$A$1" Then
If Range("c6").Value = 0 Then
Range("c8").Value = Range("A1").Value
Else
Range("c8").Value = Range("c6").Value
End If
End If
End Sub
No entiendo muy bien la macro que me propones (soy un poco nueva en esto), pero para vincular la ejecución de la macro a la celda de origen mi problema es que lo que hace que todo cambia es una celda donde se permite seleccionar de una lista, pero está en otra hoja del mismo libro. Me explico, imagínate que tengo la lista de validación en la celda B1 de la hoja 1, ¿y la macro se tiene que ejecutar en la hoja 2. Cómo tendría que modificar la macro que yo estoy utilizando? Supongo que tendré que pegarla en el workbook y a la hora de especificar el cambio mencionar la hoja, pero no sé como hacerlo. ¿Me podrías ayudar? Muchas gracias
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$b$2" Then   (pero está en la hoja 1)
If Range("c6").Value = 0 Then (pero está en la hoja 2)
Range("c8").Value = Value
Else
Range("c8").Value = Range("c6").Value
End If
End If
Porque no exploras esta opción
En el evento SheetChange del Objeto Workbook puedes pasar como parámetro la hoja que contiene a la celda que cambió, actualmente solo estas capturando la celda que cambió.
Prueba con este ejemplo que lo que hace es devolverte la referencia total de la celda que cambió incluyendo la hoja a la que pertenece.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox Sh.Name & "!" & Target.AddressLocal
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas