Cómo una macro corre tomando valor de otras celdas?

josevaldesv

Board Regular
Joined
May 13, 2004
Messages
95
mmhh :hungry: hungry for knowledge!!!

Tengo una macro que cambia de color la celda en la columna A si pongo, por ejemplo, CORRECTO o INCORRECTO en A1 y doy Enter.
CORRECTO lo pone en verde e INCORRECTO en rojo.
Esto lo hace perfecto.

Pero ahora pongo en A1 una fórmula
=IF(B1=100,"CORRECTO","INCORRECTO")
y cada vez que cambio el valor de B1 NO SE CAMBIA automáticamente el color de A1, sino hasta que me voy a A1, presiono la tecla F2 y doy Enter.

Desgraciadamente no puedo poner formato condicional porque ya tengo otros 3 colores usados en la misma columna.

Alguna idea? Ni con autoopen lo logré... :-(
 

Excel Facts

When they said...
When they said you are going to "Excel at life", they meant you "will be doing Excel your whole life".
En el evento _Change, en vez de usar A1, se debe usar B1... con la condición de

If Range("B1").Value = 100 Then
'Cambiar a verde
Else
'Cambiar a rojo
End If
 
Upvote 0
:help:
De plano no puedo....
no me sale el ejemplo....
de todos modos necesito hacer el trigger de la macro aprentado ENTER...

Está más claro mi problema en la expilcación que puse 3 o 4 mensajes abajo en el foro.

Mmmhhhh, de plano no logro descifrar.
 
Upvote 0
José,

Yo haría algo así:

<font face=Courier New><SPAN style="color:#00007F">Private</SPAN> <SPAN style="color:#00007F">Sub</SPAN> Worksheet_Change(<SPAN style="color:#00007F">ByVal</SPAN> Target <SPAN style="color:#00007F">As</SPAN> Range)
    <SPAN style="color:#00007F">If</SPAN> Target.Column <> 2 _
    <SPAN style="color:#00007F">Or</SPAN> Target.Count <> 1 <SPAN style="color:#00007F">Then</SPAN> <SPAN style="color:#00007F">Exit</SPAN> <SPAN style="color:#00007F">Sub</SPAN>
    <SPAN style="color:#00007F">With</SPAN> Target.Offset(, -1)
        <SPAN style="color:#00007F">If</SPAN> UCase(.Value) = "INCORRECTO" <SPAN style="color:#00007F">Then</SPAN>
            .Interior.ColorIndex = 3
        <SPAN style="color:#00007F">ElseIf</SPAN> UCase(.Value) = "CORRECTO" <SPAN style="color:#00007F">Then</SPAN>
            .Interior.ColorIndex = 4
        <SPAN style="color:#00007F">Else</SPAN>
            .Interior.ColorIndex = xlColorIndexNone
        <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
    <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">With</SPAN>
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN>

</FONT>
 
Upvote 0
Muchas gracias...
ya me siento muy apenado :oops:
porque todavía no sale como quiero que salga...
aún necesito darle Enter o F2-Enter a otras celdas...
aunque ya no a las originales, ahora sí a las otras...

creo que lo mejor es complementar con una macro que presione F2 y luego Enter automáticamente a todo para que ya salgan los colores....

Si tienen otra idea, please let me know...

gracias
 
Upvote 0
Lo siento José. Creía que asi era lo que querría. ¿Entonces usted desea que con cualquier cambio a cualquiera celda en la hoja, los colores en columna A se refresquen?
 
Upvote 0
Efectivamente, eso es lo que quiero.

Digamos que quiero que funcione exáctamente igual que el formato condicional... el cual cambia por el valor de la celda, incluso sin dar ENTER y a través de fórmulas (sin presionar F2 y luego Enter).

Gracias.
 
Upvote 0
Se puede adaptar el macro un poco para que no se fija en cual celda fue cambiado y poner el código en la rutina para _Calculate como indica JPG. Pero como dice JPG, aunque uno usa algo como .SpecialCells para minimizar la cantidad de celdas tocadas siempre va a tener un impacto en la eficiencia de la hoja.

<font face=Courier New>

<SPAN style="color:#00007F">Private</SPAN> <SPAN style="color:#00007F">Sub</SPAN> Worksheet_Calculate()
    <SPAN style="color:#00007F">Dim</SPAN> rngFormulasInA <SPAN style="color:#00007F">As</SPAN> Range, rngCell <SPAN style="color:#00007F">As</SPAN> Range
    <SPAN style="color:#00007F">On</SPAN> <SPAN style="color:#00007F">Error</SPAN> <SPAN style="color:#00007F">Resume</SPAN> <SPAN style="color:#00007F">Next</SPAN>
    <SPAN style="color:#00007F">Set</SPAN> rngFormulasInA = Range("A:A").SpecialCells(xlCellTypeFormulas)
    <SPAN style="color:#00007F">If</SPAN> rng<SPAN style="color:#00007F">For</SPAN>mulasInA <SPAN style="color:#00007F">Is</SPAN> <SPAN style="color:#00007F">Nothing</SPAN> <SPAN style="color:#00007F">Then</SPAN> <SPAN style="color:#00007F">Exit</SPAN> <SPAN style="color:#00007F">Sub</SPAN>
    For <SPAN style="color:#00007F">Each</SPAN> rngCell <SPAN style="color:#00007F">In</SPAN> rngFormulasInA.Cells
        <SPAN style="color:#00007F">With</SPAN> rngCell
            <SPAN style="color:#00007F">If</SPAN> UCase(.Value) = "INCORRECTO" <SPAN style="color:#00007F">Then</SPAN>
                .Interior.ColorIndex = 3
            <SPAN style="color:#00007F">ElseIf</SPAN> UCase(.Value) = "CORRECTO" <SPAN style="color:#00007F">Then</SPAN>
                .Interior.ColorIndex = 4
            <SPAN style="color:#00007F">Else</SPAN>
                .Interior.ColorIndex = xlColorIndexNone
            <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
        <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">With</SPAN>
    <SPAN style="color:#00007F">Next</SPAN> rngCell
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN>


</FONT>
 
Upvote 0
:beerchug: cheers mate!!!!

efectivamente lo hace un poco más lento...
pero está excelente esto! :D

3 meses de fórmulas se acaban de resumir a estas líneas, hahahha

gracias
 
Upvote 0

Forum statistics

Threads
1,223,948
Messages
6,175,573
Members
452,652
Latest member
eduedu

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top