Ejecutar suma de celdas coloreadas

27/10/2005 - 02:01 por Esteban Dido | Informe spam
Hola,
Estoy sumando celdas coloreadas con la macro que aparece en
http://www.excelesp.com/funcperso01.htm
recomendada por H.M. pero quisiera modificar el código para incluír un botón
que la ejecute únicamente cuando sea presionado en vez de que se actualice
sóla. Agradeceré un poco de ayuda.
ED

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
27/10/2005 - 03:10 | Informe spam
hola, Esteban !

Estoy sumando celdas coloreadas con la macro que aparece en http://www.excelesp.com/funcperso01.htm
... pero quisiera modificar el codigo para incluir un boton que la ejecute unicamente cuando sea presionado [...]



considerando que se trata de una FUNCION -personalizada- para utilizarse 'directamente' en las hojas de calculo...
[creo que] no tendria sentido 'obligarla/sujetarla/condicionarla/...' a un objeto que poco [o nada] tuviera que ver con las celdas -?-
[ademas] toma en cuenta que dicha funcion pudiera encontrarse NO en una sola... si no en varias celdas [y hojas del libro] :))

[supongo que] una alernativa +/- 'aceptable' seria agregar un parametro que 'suspenda' los re/calculos de la funcion ;)
[con lo cual] podrias incluso mantener varias funciones [misma hoja o en varias] con 'diferente' forma de auto-actualizacion :))

prueba con las siguientes modificaciones a la funcion para sumar celdas segun color 'de muestra'...
Function SumarColorFondo( _
CeldaColor As Range, _
RangoASumar As Range, _
Suspender As Range) As Double
If IsEmpty(Suspender) Then Exit Function
Dim Celda As Range
For Each Celda In RangoASumar
If Celda.Interior.ColorIndex = CeldaColor.Cells(1, 1).Interior.ColorIndex _
Then SumarColorFondo = SumarColorFondo + Celda
Next
Set Celda = Nothing
End Function

solo se ha agregado el parametro/argumento 'Suspender' que requiere de alguna celda 'adicional' a los otros argumentos [p.e.]
=SumarColorFondo(C1,A1:A10,D5) donde...
'C1' es la celda que tiene el color de fondo 'muestra'
'A1:A10' es el rango del que se desea sumar los valores cuyo color de celda sea igual al de la 'muestra' y...
'D5' es una celda 'adicional' que... si se deja 'vacia'... la funcion se suspende :))
=> toma nota que al suspender la funcion tampoco se 'sostiene' el valor anterior que se hubiera 'detectado' :-((
-> obtendras un rotundo y soberano cero -0- mientras la celda 'Suspender' se mantenga vacia :-((

saludos,
hector.
Respuesta Responder a este mensaje
#2 Esteban Dido
27/10/2005 - 04:26 | Informe spam
OK! Héctor, pongamoslo de otro modo entonces.
¿Es posible hacer que al colorear una celda se actualice inmediatamente? o
¿cómo actualizo despues de colorear la celda?
Saludos
E.D.


"Héctor Miguel" escribió en el mensaje
news:
hola, Esteban !

> Estoy sumando celdas coloreadas con la macro que aparece en


http://www.excelesp.com/funcperso01.htm
> ... pero quisiera modificar el codigo para incluir un boton que la


ejecute unicamente cuando sea presionado [...]

considerando que se trata de una FUNCION -personalizada- para utilizarse


'directamente' en las hojas de calculo...
[creo que] no tendria sentido 'obligarla/sujetarla/condicionarla/...' a un


objeto que poco [o nada] tuviera que ver con las celdas -?-
[ademas] toma en cuenta que dicha funcion pudiera encontrarse NO en una


sola... si no en varias celdas [y hojas del libro] :))

[supongo que] una alernativa +/- 'aceptable' seria agregar un parametro


que 'suspenda' los re/calculos de la funcion ;)
[con lo cual] podrias incluso mantener varias funciones [misma hoja o en


varias] con 'diferente' forma de auto-actualizacion :))

prueba con las siguientes modificaciones a la funcion para sumar celdas


segun color 'de muestra'...
Function SumarColorFondo( _
CeldaColor As Range, _
RangoASumar As Range, _
Suspender As Range) As Double
If IsEmpty(Suspender) Then Exit Function
Dim Celda As Range
For Each Celda In RangoASumar
If Celda.Interior.ColorIndex = CeldaColor.Cells(1,


1).Interior.ColorIndex _
Then SumarColorFondo = SumarColorFondo + Celda
Next
Set Celda = Nothing
End Function

solo se ha agregado el parametro/argumento 'Suspender' que requiere de


alguna celda 'adicional' a los otros argumentos [p.e.]
=SumarColorFondo(C1,A1:A10,D5) donde...
'C1' es la celda que tiene el color de fondo 'muestra'
'A1:A10' es el rango del que se desea sumar los valores cuyo color de


celda sea igual al de la 'muestra' y...
'D5' es una celda 'adicional' que... si se deja 'vacia'... la funcion se


suspende :))
=> toma nota que al suspender la funcion tampoco se 'sostiene' el valor


anterior que se hubiera 'detectado' :-((
-> obtendras un rotundo y soberano cero -0- mientras la celda


'Suspender' se mantenga vacia :-((

saludos,
hector.


Respuesta Responder a este mensaje
#3 Héctor Miguel
27/10/2005 - 05:06 | Informe spam
hola, Esteban !

... pongamoslo de otro modo entonces.
Es posible hacer que al colorear una celda se actualice inmediatamente? o
como actualizo despues de colorear la celda?



-> la 'nueva' consideracion... es que [hasta donde se y hasta la fecha]...
no existe ningun 'evento' [en excel] que 'detecte' si el usuario 'simplemente' ha aplicado formato a las celdas :-(
-> por lo anterior... seria necesario 'forzar' a que se efectue un re/calculo -cuando menos- en 'esa' hoja...
ademas de 'obligar' a la funcion para que se re/calcule no solo al modificar los rangos que intervienen...
-> la segunda parte [obligar a la funcion para que...] lo obtienes si agregas ->como primera linea<- a la funcion...
la instruccion de: Application.Volatile -> justo antes de la instruccion 'Dim..'
-> la primera parte [obligar a re/calculos 'constantes' de la hoja] la obtienes si agregas...
en el modulo de codigo de 'esa' hoja [o de las hojas donde utilices la funcion] ==Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Me.Calculate
End Sub

solo toma en cuenta que la 'actualizacion' de los resultados, ocurrira hasta el momento en que cambies de celda/rango en la hoja :-(

saludos,
hector. ;)
Respuesta Responder a este mensaje
#4 Esteban Dido
27/10/2005 - 16:40 | Informe spam
No me sirve Héctor. Gracias igual por tu esfuerzo.
Mira, el punto es el siguiente: es para un usuario que tiene 82 años. Debe
funcionar sin complicaciones. Si obligamos a recálculos constantes, el paso
de una celda a otra se pone tremendamente lento. Por eso, quisiera que una
vez que el usuario haya hecho todas las coloraciones/decoloraciones que
necesita, haga un click en alguna parte para que se actualice la hoja, sólo
una hoja, la hoja activa, y le arroje la suma que desea. ¿No se puede hacer
con una macro en vez de una función personalizada? Ese es el motivo por el
que pensé en un botón de comando como dije al principio.
E.D.


"Héctor Miguel" escribió en el mensaje
news:
hola, Esteban !

> ... pongamoslo de otro modo entonces.
> Es posible hacer que al colorear una celda se actualice inmediatamente?


o
> como actualizo despues de colorear la celda?

-> la 'nueva' consideracion... es que [hasta donde se y hasta la fecha]...
no existe ningun 'evento' [en excel] que 'detecte' si el usuario


'simplemente' ha aplicado formato a las celdas :-(
-> por lo anterior... seria necesario 'forzar' a que se efectue un


re/calculo -cuando menos- en 'esa' hoja...
ademas de 'obligar' a la funcion para que se re/calcule no solo al


modificar los rangos que intervienen...
-> la segunda parte [obligar a la funcion para que...] lo obtienes si


agregas ->como primera linea<- a la funcion...
la instruccion de: Application.Volatile -> justo antes de la


instruccion 'Dim..'
-> la primera parte [obligar a re/calculos 'constantes' de la hoja] la


obtienes si agregas...
en el modulo de codigo de 'esa' hoja [o de las hojas donde utilices la


funcion] ==> Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Me.Calculate
End Sub

solo toma en cuenta que la 'actualizacion' de los resultados, ocurrira


hasta el momento en que cambies de celda/rango en la hoja :-(

saludos,
hector. ;)


Respuesta Responder a este mensaje
#5 Héctor Miguel
28/10/2005 - 02:38 | Informe spam
hola, Esteban !

No me sirve... Gracias igual por tu esfuerzo.
Mira, el punto es el siguiente: es para un usuario que tiene 82 años. Debe funcionar sin complicaciones.
Si obligamos a recalculos constantes, el paso de una celda a otra se pone tremendamente lento.
... quisiera que una vez que... haya hecho todas las de/coloraciones que necesita
haga un click en alguna parte para que se actualice la hoja, solo una hoja, la hoja activa, y le arroje la suma que desea.
... se puede hacer con una macro en vez de una funcion personalizada?
Ese es el motivo por el que pense en un boton de comando como dije al principio.



1) si comentas que re/calculos constantes provocan lentitud [pareciera que] el 'modelito' no esta tan 'libre de complicaciones' -?-

2) no se si habras notado que la instruccion de 're-calcular' [en el evento de esa hoja] obliga al re-calculo de SOLO 'esa' hoja -?-
[acabo de hacer pruebas en modelos bastante 'complejos' en sus re-calculos y... 'no problem'] :D

3) cambiar de funcion a macro 'directa' implicaria perder beneficios como...
en una funcion puedes usarla en tantas celdas con distintos 'argumentos' y rangos como sea necesario [pero]...
en una macro seria necesario algun parametro adicional para indicarle al codigo 'cual de todas' -?- [o modificar la macro n_veces] :-(

4) [incluso] pensaria en procedimientos menos 'complicados' como...
en lugar de de/colorear celdas... usar celdas adyacentes como 'criterios' ya sea por numero o textos [1,2,3... / rojo,azul,verde...]
y usar formulas del tipo: =sumaproducto(rango_a_sumar*(rango_criterio=criterio))

si me estoy 'metiendo donde no me llaman' [cosa rara en mi]... :))
podrias exponer algun otro detalle relevante que se pudiera estar quedando 'en el tintero' ?

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