Necesito saber como tomar el valor de una celda, para que dependiendo del valor este se ejecute la macro.
Ejemplo
Case Is <= 39.39: Shapes.Range("Freeform " & Figura).Fill.ForeColor.RGB = RGB(0, 176, 240)
El valor 39.39 el que digite de forma manual, quiero que sea tomado de una celda (G8), para que este ejecute la orden del cambio del color.
Yo pondría:
Range("G8").Value
Siempre que la celda sea siempre la G8.
Saludos
Mi opción sería:
If cell(8,7).value<=39.39 then
'Tu código para colorear la figura aqui
End if
La referencia R1C1 es la de G8, fila 8, columna 7
Visitanos en http://universoexcel.com
he probado, tu suegerencia, pero no me funciona,
conlos valores que he puesto de forma manual si me funciona al cambiar el dato.
pongo toda la secuencia:
Option Explicit
Private Sub Worksheet_Change(ByVal target As Range)
Select Case target.Address(0, 0)
Case "N35": Colorear target.Value, 3848
Case "N36": Colorear target.Value, 3844
Case "N37": Colorear target.Value, 3851
Case "N38": Colorear target.Value, 3850
Case "N39": Colorear target.Value, 3843
Case "N40": Colorear target.Value, 3847
Case "N41": Colorear target.Value, 3852
Case "N42": Colorear target.Value, 3845
Case "N43": Colorear target.Value, 3853
Case "N44": Colorear target.Value, 3849
Case "N45": Colorear target.Value, 3842
Case "N46": Colorear target.Value, 3854
End Select
End Sub
Private Sub Colorear(target#, Figura#)
Select Case target
Case Is <= 19.69: Shapes.Range("Freeform " & Figura).Fill.ForeColor.RGB = RGB(0, 102, 0)
Case Is <= 39.39: Shapes.Range("Freeform " & Figura).Fill.ForeColor.RGB = RGB(0, 176, 240)
Case Is <= 59.09: Shapes.Range("Freeform " & Figura).Fill.ForeColor.RGB = RGB(255, 255, 0)
Case Is <= 78.79: Shapes.Range("Freeform " & Figura).Fill.ForeColor.RGB = RGB(255, 192, 0)
Case Is >= 78.8: Shapes.Range("Freeform " & Figura).Fill.ForeColor.RGB = RGB(255, 0, 0)
End Select
End Sub
este no esta en un modulo sino en la hoja de calculo.
los numeros quiero que hagan referencia a la celda, por que es un valor cambiante,
Gracias
Probe esta opcion, tampoco me funciona, lo que pasa es que la celda G8 contiene un valor que cambia, no siempre es 39.39 (toma un valor de acuerdo a otros parametros), dicho de otra manera tengo un rango de valores que dependiendo de ese valor, la forma que tengo (Mapa) este me cambia de color, hasta donde lo he trabajado me funciona bien es decir si lo pongo el valor de forma manual , por ejemplo si cambio por 50, a 60 etc. funciona perfectamente, pero tendría que hacerlo siempre que el valor de las celdas estan cambian. que es frecuente.
Pues entonces no emplees un número, emplea una referencia a tu celda
por ejemplo, si quieres comparar con la celda A1 (fila1 columna 1) puedes hacer como sugiere UniversoExcel
Case Is <= Cells(1, 1).Value: Shapes.Range("Freeform " & Figura).Fill.ForeColor.RGB = RGB(0, 102, 0)
Así cada vez que compare mirará el valor de esa celda.
(he probado con Range("a1").value, pero se produce un error 16 expresión demasiado compleja)
------
Ya sé Excel, pero necesito más.
El problema del error de expresión compleja lo resuelvo asignando el valor a una variable intermedia.
Luego se libera la variable y caso resuelto. Además, en casos repetitivos aligera el trabajo, aunque utilice más memoria.
Sería algo así como
Dim a as Single (o el tipo de variable que convenga)
a = Range("G8").Value
Case Is <= a: Shapes.Range("Freeform " & Figura).Fill.ForeColor.RGB = RGB(0, 102, 0)
En caso de que apetezca liberar la variable:
Set a = Nothing
El utilizar Range o Cells depende de cómo te organices. Si vas a hacer un bucle con las mismas operaciones variando filas o columnas, cells funciona muy bien. Si la estructura mental de tu algoritmo es de moverte alrededor de la celda activa, que es siempre la misma, range hace el trabajo de maravilla.
Saludos
Gracias, por la sugerencia, si la he probado y funciona muy bien garcias
saludes
Gracias, por la aclaración, funciona conCells.
Saludes
Has mirado de hacerlo con Formato condicional ??
disculpen como en A2 viera or donde va la celda activa ?