Saludos me pueden ayudar muy comedidamente con la siguiente macro: mediante esta macro solo funciona cuando en la celda A1 ingreso manualmente al valor ya sea 1 o 0, lo que necesito es que en la celda A1 el valor venga de una formula de la celda B5.
Otra situacion es cuando se ejecuta con 1 salta a la celda E7 y cuando se ejecuta con 0 salta a la cleda B14, lo que deseo es que no salte ni seleccione ninguna celda.
La hoja la he protejido con una contraseña "X".
Favor analizar esta macro que he logrado
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect "X"
Application.ScreenUpdating = False
If Not Intersect(Target, Range("A1")) Is Nothing Then
If Range("A1").Value = 1 Then
ActiveSheet.Shapes("Rectangle 1").Select
Selection.Font.ColorIndex = 0
ActiveSheet.Shapes("Rectangle 2").Select
Selection.Font.ColorIndex = 0
Range("C7").Select
ActiveSheet.Shapes("Line 3").Select
Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
Selection.ShapeRange.Line.Visible = msoTrue
ActiveSheet.Protect "X"
Else
If Range("A1").Value = 0 Then
ActiveSheet.Shapes("Rectangle 1").Select
Selection.Font.ColorIndex = 2
ActiveSheet.Shapes("Rectangle 2").Select
Selection.Font.ColorIndex = 2
Range("B14").Select
ActiveSheet.Shapes("Line 3").Select
Selection.ShapeRange.Line.ForeColor.SchemeColor = 9
Selection.ShapeRange.Line.Visible = msoTrue
ActiveSheet.Protect "X"
End If
End If
End If
End Sub
Adjunto | Tamaño |
---|---|
cambia_color_texto_de_imagenes.xls | 32 KB |
Se ejecuta al escribir el valor a mano en la celda, porque está puesto en el evento Worksheet_Change
Este evento se produce cuando cambia algo en la hoja, es decir, por ejemplo cuando tecleas un valor en una celda.
pero cuando la hoja se recalcula y una fórmula ahora da otro resultado, eso no lo interpreta Excel como un cambio de la hoja, porque la fórmula es la misma de antes. lo que ha cambiado es el resultado de esa fórmula.
Si lo que quieres es que se ejecute cuando cambie el resultado de una fórmula que tienes en la hoja, tendrás que realizar la comprobación cada vez que se recalcule la hoja, para ver si ha cambiado el resultado de la celda que te interesa
Esto es el evento Calculate. pon ahí tu código
Private Sub Worksheet_Calculate()
If Range("A1").Value = 1 Then
'...
ElseIf Range("A1").Value = 0 Then
'...
End If
End Sub
claro, esto se estaría ejecutando con cada recálculo, porque comprobamos el valor de la celda, también se ejecutaría si el valor sigue siendo 1 o 0. Para evitarlo, podrías tener alguna variable estática donde almacenar el valor, para comprobar si éste cambia.
Sobre tu segunda pregunta, no quieres que salte ni se seleccione ninguna celda, pues dos opciones:
opción 1: comenta las líneas que tienes al final que cambian las celdas
opción 2: añade una última línea que seleccione la celda final donde quieres que termine tu macro
------
Ya sé Excel, pero necesito más.
Gracias Master excelente ayuda a esta consulta.
Debate solucionado cerrado