Saber celda que cambia

18/12/2005 - 12:48 por Principiante | Informe spam
Hola grupo.

En una hoja voy cambiando el color de fondo de una celda y hago una suma
de las celdas que poseen el mismo color de fondo.

El caso es que la función que hace esa suma se recalcula cada vez que se
produce un cambio del valor de alguna de las celdas con ese color. Para
que se recalculen cada vez que haya algún cambio en esa celda he puesto
en el evento de la hoja: Worksheet_SelectionChange la instrucción:
Application.CalculateFull

Lo que busco es saber como hacer para que sólo se recalcule todo cuando
se produzca un cambio de color en la celda donde voy cambiando el color
para sumar Ej: C2 pues sino se ejecuta cada vez que salgo de una celda
por ejemplo.

Supongo que se debe controlar el parámetro Target de la función pero no
sé como hacerlo.

Gracias por cualquier ayuda.

Principiante.

Preguntas similare

Leer las respuestas

#1 KL
18/12/2005 - 13:16 | Informe spam
Hola Prinicpiante,

Suponiendo que las celdas que pueden cambiar de color pueden estar en el rango [A2:A20], prueba empezar tu procedimiento con:

If Intersect(Target, [A2:A20]) Is Nothing Then Exit Sub

Suponiendo que las celdas que pueden cambiar de color pueden estar en toda la columna [A] prueba empezar tu procedimiento con:

If Intersect(Target, [A:A]) Is Nothing Then Exit Sub

Y por cierto, si la asignacion de colores a las celdas se hace con algun criterio racional, seguramente se podria evitar contar los
colores y contar esos casos que provocan la variacion de color. Explicas mas detalles?

Saludos,
KL


"Principiante" wrote in message news:%
Hola grupo.

En una hoja voy cambiando el color de fondo de una celda y hago una suma de las celdas que poseen el mismo color de fondo.

El caso es que la función que hace esa suma se recalcula cada vez que se produce un cambio del valor de alguna de las celdas con
ese color. Para que se recalculen cada vez que haya algún cambio en esa celda he puesto en el evento de la hoja:
Worksheet_SelectionChange la instrucción: Application.CalculateFull

Lo que busco es saber como hacer para que sólo se recalcule todo cuando se produzca un cambio de color en la celda donde voy
cambiando el color para sumar Ej: C2 pues sino se ejecuta cada vez que salgo de una celda por ejemplo.

Supongo que se debe controlar el parámetro Target de la función pero no sé como hacerlo.

Gracias por cualquier ayuda.

Principiante.
Respuesta Responder a este mensaje
#2 Principiante
18/12/2005 - 13:30 | Informe spam
Hola KL.

Es seguir el ejemplo que me ayudaste a completar en un pos anterior al
que me has respondido hace poco.

Tengo unas celdas con números A2:A12 con color de fondo distintos.

En la celda C2 cambio el color de esa celda y entonces en otra celda
cojo y obtengo la suma de las celdas que se encuentran en el rango
A2:A12 con ese color de fondo. Eso ya lo tengo.

Ahora me interesa que cuando cambie el color en la celda C2, se haga la
suma de forma automática pues no se actualiza la suma. He puesto lo del
Application.CalculateFull que comentaba pero eso se ejecuta cava vez que
cambio de celda por ej.

Voy a probar lo que comentas a ver que tal.

Gracias de nuevo.

Principiante.

KL escribió:
Hola Prinicpiante,

Suponiendo que las celdas que pueden cambiar de color pueden estar en el
rango [A2:A20], prueba empezar tu procedimiento con:

If Intersect(Target, [A2:A20]) Is Nothing Then Exit Sub

Suponiendo que las celdas que pueden cambiar de color pueden estar en
toda la columna [A] prueba empezar tu procedimiento con:

If Intersect(Target, [A:A]) Is Nothing Then Exit Sub

Y por cierto, si la asignacion de colores a las celdas se hace con algun
criterio racional, seguramente se podria evitar contar los colores y
contar esos casos que provocan la variacion de color. Explicas mas
detalles?

Saludos,
KL


"Principiante" wrote in message
news:%

Hola grupo.

En una hoja voy cambiando el color de fondo de una celda y hago una
suma de las celdas que poseen el mismo color de fondo.

El caso es que la función que hace esa suma se recalcula cada vez que
se produce un cambio del valor de alguna de las celdas con ese color.
Para que se recalculen cada vez que haya algún cambio en esa celda he
puesto en el evento de la hoja: Worksheet_SelectionChange la
instrucción: Application.CalculateFull

Lo que busco es saber como hacer para que sólo se recalcule todo
cuando se produzca un cambio de color en la celda donde voy cambiando
el color para sumar Ej: C2 pues sino se ejecuta cada vez que salgo de
una celda por ejemplo.

Supongo que se debe controlar el parámetro Target de la función pero
no sé como hacerlo.

Gracias por cualquier ayuda.

Principiante.




Respuesta Responder a este mensaje
#3 Principiante
18/12/2005 - 13:36 | Informe spam
He probado esto:

If Intersect(Target, [C2:C2]) Is Nothing Then
Else
Application.CalculateFull
MsgBox "Actualizo"
End If

El calculo de la suma se hace cuando ENTRO en la celda. Si estoy en la
celda, le cambio el color y salgo (o no salgo) de ella no se produce
ningún cambio (no actualiza).

Si pongo esto:

If Intersect(Target, [C2:C2]) Is Nothing Then
Application.CalculateFull
MsgBox "Actualizo"
Else
End If

Ahora si actuliza al SALIR de la celda C2 pero tambien lo hace de
cualquier otra celda de la hoja. No se lanza al ENTRAR en C2.

Principiante.

Principiante escribió:
Hola KL.

Es seguir el ejemplo que me ayudaste a completar en un pos anterior al
que me has respondido hace poco.

Tengo unas celdas con números A2:A12 con color de fondo distintos.

En la celda C2 cambio el color de esa celda y entonces en otra celda
cojo y obtengo la suma de las celdas que se encuentran en el rango
A2:A12 con ese color de fondo. Eso ya lo tengo.

Ahora me interesa que cuando cambie el color en la celda C2, se haga la
suma de forma automática pues no se actualiza la suma. He puesto lo del
Application.CalculateFull que comentaba pero eso se ejecuta cava vez que
cambio de celda por ej.

Voy a probar lo que comentas a ver que tal.

Gracias de nuevo.

Principiante.

KL escribió:

Hola Prinicpiante,

Suponiendo que las celdas que pueden cambiar de color pueden estar en
el rango [A2:A20], prueba empezar tu procedimiento con:

If Intersect(Target, [A2:A20]) Is Nothing Then Exit Sub

Suponiendo que las celdas que pueden cambiar de color pueden estar en
toda la columna [A] prueba empezar tu procedimiento con:

If Intersect(Target, [A:A]) Is Nothing Then Exit Sub

Y por cierto, si la asignacion de colores a las celdas se hace con
algun criterio racional, seguramente se podria evitar contar los
colores y contar esos casos que provocan la variacion de color.
Explicas mas detalles?

Saludos,
KL


"Principiante" wrote in message
news:%

Hola grupo.

En una hoja voy cambiando el color de fondo de una celda y hago una
suma de las celdas que poseen el mismo color de fondo.

El caso es que la función que hace esa suma se recalcula cada vez que
se produce un cambio del valor de alguna de las celdas con ese color.
Para que se recalculen cada vez que haya algún cambio en esa celda he
puesto en el evento de la hoja: Worksheet_SelectionChange la
instrucción: Application.CalculateFull

Lo que busco es saber como hacer para que sólo se recalcule todo
cuando se produzca un cambio de color en la celda donde voy cambiando
el color para sumar Ej: C2 pues sino se ejecuta cada vez que salgo de
una celda por ejemplo.

Supongo que se debe controlar el parámetro Target de la función pero
no sé como hacerlo.

Gracias por cualquier ayuda.

Principiante.





Respuesta Responder a este mensaje
#4 KL
18/12/2005 - 23:57 | Informe spam
Hola Principiante,

Este comportamiento es correcto (aunque no sea lo que buscas): si entras en la celda (modo edicion) y luego sales se recalcularan
todas las formulas volatiles independientemente de si tengas algun procedimiento asignado a algun evento. Y si, la variable Target
del evento Worksheet_SelectionChange se refiere al rango que se acaba de seleccionar (lo que provoca el evento) no el que acabas de
abandonar.

Insisto, creo que merece la pena replantear la tarea y analizar el 'por que' se asigna (se ha asignado) un color determinado a cada
una de las celdas para usar este 'por que' como criterio de suma. Te evitarias muchos dolores de cabeza. De hecho, creo que podrias
crear un macro que coloree las celdas segun el 'por que' y una formula que sume los valores de las mismas sin en este ultimo caso
recurrir al VBA.

Saludos,
KL


"Principiante" wrote in message news:%23JTye%
He probado esto:

If Intersect(Target, [C2:C2]) Is Nothing Then
Else
Application.CalculateFull
MsgBox "Actualizo"
End If

El calculo de la suma se hace cuando ENTRO en la celda. Si estoy en la celda, le cambio el color y salgo (o no salgo) de ella no
se produce ningún cambio (no actualiza).

Si pongo esto:

If Intersect(Target, [C2:C2]) Is Nothing Then
Application.CalculateFull
MsgBox "Actualizo"
Else
End If

Ahora si actuliza al SALIR de la celda C2 pero tambien lo hace de cualquier otra celda de la hoja. No se lanza al ENTRAR en C2.

Principiante.

Principiante escribió:
Hola KL.

Es seguir el ejemplo que me ayudaste a completar en un pos anterior al que me has respondido hace poco.

Tengo unas celdas con números A2:A12 con color de fondo distintos.

En la celda C2 cambio el color de esa celda y entonces en otra celda cojo y obtengo la suma de las celdas que se encuentran en el
rango A2:A12 con ese color de fondo. Eso ya lo tengo.

Ahora me interesa que cuando cambie el color en la celda C2, se haga la suma de forma automática pues no se actualiza la suma. He
puesto lo del Application.CalculateFull que comentaba pero eso se ejecuta cava vez que cambio de celda por ej.

Voy a probar lo que comentas a ver que tal.

Gracias de nuevo.

Principiante.

KL escribió:

Hola Prinicpiante,

Suponiendo que las celdas que pueden cambiar de color pueden estar en el rango [A2:A20], prueba empezar tu procedimiento con:

If Intersect(Target, [A2:A20]) Is Nothing Then Exit Sub

Suponiendo que las celdas que pueden cambiar de color pueden estar en toda la columna [A] prueba empezar tu procedimiento con:

If Intersect(Target, [A:A]) Is Nothing Then Exit Sub

Y por cierto, si la asignacion de colores a las celdas se hace con algun criterio racional, seguramente se podria evitar contar
los colores y contar esos casos que provocan la variacion de color. Explicas mas detalles?

Saludos,
KL


"Principiante" wrote in message news:%

Hola grupo.

En una hoja voy cambiando el color de fondo de una celda y hago una suma de las celdas que poseen el mismo color de fondo.

El caso es que la función que hace esa suma se recalcula cada vez que se produce un cambio del valor de alguna de las celdas
con ese color. Para que se recalculen cada vez que haya algún cambio en esa celda he puesto en el evento de la hoja:
Worksheet_SelectionChange la instrucción: Application.CalculateFull

Lo que busco es saber como hacer para que sólo se recalcule todo cuando se produzca un cambio de color en la celda donde voy
cambiando el color para sumar Ej: C2 pues sino se ejecuta cada vez que salgo de una celda por ejemplo.

Supongo que se debe controlar el parámetro Target de la función pero no sé como hacerlo.

Gracias por cualquier ayuda.

Principiante.





Respuesta Responder a este mensaje
#5 Héctor Miguel
19/12/2005 - 04:01 | Informe spam
hola, Principiante !

haciendo [o tratando de hacer] un 'resumen' de los puntos esenciales de tu consulta :D

1) en tus mensajes 1 y 2 comentas que...
'... voy cambiando el color de fondo de una celda y hago una suma de las... que poseen el mismo color...
'... Para que se recalculen cada vez que haya algun cambio en esa celda he puesto en el evento de la hoja:
'... Worksheet_SelectionChange la instruccion: Application.CalculateFull...
'... busco... que solo se recalcule todo cuando se produzca un cambio de color en la celda... para sumar Ej: C2 [...]

2) en tu mensaje 3 comentas que usando EL MISMO evento [con los codigos que expones]...
tampoco logras que se 'active' el re/calculo SOLO cuando modificas -> el color de la celda 'comando'

solamente 'adicionar' a lo ya comentado por KL, lo siguiente:
1) [hasta donde se] NO existe -> ningun evento que 'detecte' cambios a los formatos de las celdas
2) el evento '_selectionchange' se dispara -> cada vez que 'cambias' la seleccion 'activa' en la hoja del evento
3) en ambos casos [del codigo que expones]... el 'efecto' es el mismo, es decir...
solo se dispara el evento cuando el cambio de seleccion 'activa' NO ES la celda 'comando' [o sea, 'cualquiera' otra]
4) aunque usaras el evento -> '_change'... -> el punto 1 'impide' que los cambios de color sean 'detectados'

serviria bastante si expones el 'criterio' con el que se da/quita/cambia/... color a las celdas [comando y 'afectables']
si el criterio es 'discrecional'... podrias 'minimizar' [quizas evitar] el uso de funciones y codigos por vba...
-> si los detalles [que siguen 'en el tintero'] fueran 'sujetos para otros trucos/efectos/...' ;)

saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida