# Visual Basic: Cómo hago que corra una macro sin Enter?



## josevaldesv (Nov 8, 2004)

Hola...

Toda su ayuda ha sido inigualable,
pero ahora no sé cómo arreglar un detalle.

Tengo una macro que pone más de 3 formatos condicionales en la columna A, pero el valor de A se da automáticamente después de que yo cambio B, por ejemplo. (En A tengo una fórmula que hace referencia a B).

Mi problema es que tengo que apretar F2 Enter en cada celda de A para que la macro valide el dato resultado de la fórmula y ya me ponga los diferentes colores.

Existe una manera en que no tenga que hacer esto yo? Quisiera incluso no tener que recurrir a una macro que haga F2 Enter por mí todas las veces.

Saludos,


----------



## Greg Truby (Nov 8, 2004)

Lo siento José, pero no puedo duplicar su problema.  Si pongo formato condicionales en A2, la cual tiene una fórmula sencilla: _=B2*2_ y cambio B2, los formatos en A2 cambian como deben.  ¿Tal vez no entendí bien?


----------



## josevaldesv (Nov 8, 2004)

No prob.

Mi problema es este... te explico.

Quiero tener 6 colores diferentes en A, que interactúen con lo que yo pongo.
if cel = "" Color 1. Blanco (default color)
if cel = G Color 2. Verde (1er color en formato condicional)
if cel = Y Color 3. Amarillo (2do color en formato condicional)
if cel = R Color 4. Rojo (3er color en formato condicional)
if cel = B Color 5. Azul (desde la macro lo saca)
if cel = N Color 6. Gris (desde la macro lo saca)

Los de formato condicional los pone automáticamente, dependiendo del valor.
Si en la columna A tengo una fórmula que reacciona a lo que hay en B, tipo =if(b1>100,"G","Y") 
entonces dependiendo de lo que yo ponga en B, me pondrá en verde o amarillo la celda de A.
El formato condicional dice que si es G, lo ponga verde, si es Y, lo ponga amarillo, y si es R lo ponga Rojo.

El color cambia SIN TENER QUE PRESIONAR ENTER, ya que reacciona al resultado de la fórmula.

Mi problema es cuando, por ejemplo, quiero que sea B, o sea azul.
La macro identifica que debe cambiar a azul, pero no lo hace sino hasta que me voy a la celda, presiono la tecla F2 y luego le doy Enter.

Copio el macro que tengo.

Private Sub Worksheet_Change(ByVal Target As Range)
    '   Multiple Conditional Format
    Dim rng As Range
     '   Only look at single cell changes
    If Target.Count > 1 Then Exit Sub
    '   Adjust Format range to suit
    Set rng = Range("A:A")
    '   Only look at that range
    If Intersect(Target, rng) Is Nothing Then Exit Sub
        '   Adjust conditions to suit
        If Left(Target, 1) <> "B" Or Left(Target, 1) <> "N" Then _
            Target.Interior.ColorIndex = 0
        If Left(Target, 1) <> "B" Or Left(Target, 1) <> "N" Then _
            Target.Font.ColorIndex = 1
                If Left(Target, 1) = "B" Then Target.Interior.ColorIndex = 5    '   Blue
                If Left(Target, 1) = "B" Then Target.Font.ColorIndex = 2    '   White
                If Left(Target, 1) = "N" Then Target.Interior.ColorIndex = 16   ' Gray
End Sub

Sólo quisiera saber si existe una manera en que se ponga del color que pongo en la macro SIN presionar Enter.

Saludos,


----------



## joelcg (Jan 4, 2005)

*CALCULO*

Uppsss creo que tienes configurado el calculo Manual tan solo tienes que ponerlo en AUTOMATIC para que corra la macro sola.  

Tools / Options / Calculation / Automatic / OK


----------



## Greg Truby (Jan 4, 2005)

José,

Es un buen inicio.  Pero usted escogió el blanco equivocado.  En vez de chequer si Target hace intersección con columna A, chequee columna B, ajustandos los Offsets de acuerdo con la lógica nueva.  (Si es que los valores de todas las de A dependen de las de B.)  

Si hay unas de A que no dependen de B, entonces, hay que SET un variable tipo rango a las celdas de A, y revisarlos uno por uno (FOR EACH) cada vez que hay un evento de cambio (o tal vez Calculate sería mejor) no importando qué fue Target.  Obviamente este tipo de solución aumento el "overhead" entonce trate de evitarlo si puede.

Saludos,


----------



## josevaldesv (Jan 5, 2005)

Gracias por los tips.

Como tengo que correr una macro que hace algunos cálculos, le agregué que simplemente filtrara las celdas que busco, y que las ponga del color que yo quiero.
No es tipo formato condicional automático, pero funciona y no hace lento el programa.

Gracias...


----------

