Foros del Web » Soporte técnico » Ofimática »

Función que suma según los colores de fondo

Estas en el tema de Función que suma según los colores de fondo en el foro de Ofimática en Foros del Web. Tengo la siguiente función que suma según el color de fondo de las celdas: Código PHP: Function  SumColor ( rColor  As  Range ,  rSumRange  As  ...
  #1 (permalink)  
Antiguo 19/03/2007, 12:02
Avatar de Daniel Ulczyk
Super Moderador
 
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires
Mensajes: 9.263
Antigüedad: 19 años, 1 mes
Puntos: 2114
Función que suma según los colores de fondo

Tengo la siguiente función que suma según el color de fondo de las celdas:


Código PHP:
Function SumColor(rColor As RangerSumRange As Range)

''''''''''''''''''''''''''''''''''''''
'Written by Ozgrid Business Applications
'
www.ozgrid.com
'http://www.ozgrid.com/VBA/Sum.htm
'
Sums cells based on a specified fill color.
''''''''''''''''''''''''''''''''''''''
    
Dim rCell As Range
    Dim iCol 
As Integer
    Dim vResult

    iCol 
rColor.Interior.ColorIndex

        
For Each rCell In rSumRange
            
If rCell.Interior.ColorIndex iCol Then
                vResult 
WorksheetFunction.Sum(rCell) + vResult
            End 
If
        
Next rCell

    SumColor 
vResult
End 
Function 
La cual funciona bien y se adapta a mis necesidades.
Aunque al momento de la edición donde existe una cantidad, si cambio el color de fondo no me actualiza la función.
Sólo lo actualiza si elijo un color de fondo y luego introduzco una cantidad en la celda, pero no en sentido inverso
¿Cómo se puede optimizar la función para que el orden de modificación de la celda sea indistinto?
__________________
—Somos lo que hacemos repetidamente. La excelencia, entonces, no es un acto sino un hábito. (Aristóteles dixit)
  #2 (permalink)  
Antiguo 19/03/2007, 12:34
Avatar de abrahamvj  
Fecha de Ingreso: julio-2006
Ubicación: Lima, Peru
Mensajes: 708
Antigüedad: 17 años, 9 meses
Puntos: 18
Re: Función que suma según los colores de fondo

Ninguna funcion de excel, asi sea propia, detecta los cambios en formato de las celdas. Por eso solo se actualizan los resultados de esa funcion, cuando ingresas algo en esa, o en cualquier otra celda.

Quizas alguien te diga que pruebes con Application.Volatile, pero lo primero que te digo es seguro.

Abraham
  #3 (permalink)  
Antiguo 19/03/2007, 12:49
Avatar de Daniel Ulczyk
Super Moderador
 
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires
Mensajes: 9.263
Antigüedad: 19 años, 1 mes
Puntos: 2114
Re: Función que suma según los colores de fondo

Gracias abrahamvj!

Cita:
Quizas alguien te diga que pruebes con Application.Volatile
Hasta donde tengo entendido, los alcances de Application.Volatile True es para forzar a recalcular. Pero en la función que cito, no me quita ni me agrega nada. Menos por las necesidades que tengo, que cualquiera sea el orden de la edición.
Es posible que pueda o deba incluirse algo así como Worksheet_SelectionChange?
Si es así ¿cómo se implementa dentro de la función?
Saludos!
__________________
—Somos lo que hacemos repetidamente. La excelencia, entonces, no es un acto sino un hábito. (Aristóteles dixit)
  #4 (permalink)  
Antiguo 19/03/2007, 14:01
Avatar de Daniel Ulczyk
Super Moderador
 
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires
Mensajes: 9.263
Antigüedad: 19 años, 1 mes
Puntos: 2114
Re: Función que suma según los colores de fondo

Sigo buscando recursos en la Red, en el entretanto alguien más aporte con sus conocimientos.
Doy entonces con el post en el foro de Developpez.net

SilkyRoad
Cita:


bonjour Thierry

as tu testé la procedure ?
en fait dans l'exemple ,l'evenement SelectionChange permet de recuperer dans des variables , la couleur et les coordonnéees de la cellule sélectionnée
lors de la selection suivante , la procedure verifie si l'ancienne selection a été entre temps modifiée


ci joint une autre version

Option Explicit
Dim x As Integer
Dim Cell As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next

If Cell = "" Then
x = Target.Interior.ColorIndex
Cell = Target.Address
Exit Sub
End If

If Range(Cell).Interior.ColorIndex <> x Then ActiveSheet.Calculate
x = Target.Interior.ColorIndex
Cell = Target.Address
End Sub


bon week end
michel
Ahora bien. Dados que mis conocimientos de francés están a la altura de los de VBasic.
¿Cómo se hace para que esto funcione (si debiera) todo junto?
__________________
—Somos lo que hacemos repetidamente. La excelencia, entonces, no es un acto sino un hábito. (Aristóteles dixit)
  #5 (permalink)  
Antiguo 01/04/2007, 01:49
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años
Puntos: 88
Función que suma según los colores de fondo

Este post no había quedado definitivamente "cerrado"...
Sin embargo, dos muy interesantes "perlitas": una de "abrahamvj" y otra de "3pies" me parece que -unidas- ponen "la frutilla al postre".

El problema radica en que:
Cita:
Iniciado por abrahamvj
Ninguna funcion de Excel, asi sea propia, detecta los cambios en formato de las celdas. Por eso solo se actualizan los resultados de esa funcion, cuando ingresas algo en esa, o en cualquier otra celda.

Quizas alguien te diga que pruebes con Application.Volatile, pero lo primero que te digo es seguro.
El método "Application.Volatile" marca una función definida por el usuario como volátil. Una función volátil debe volver a calcularse siempre que se efectúe un cálculo en cualquier celda de la hoja de cálculo.

Por lo tanto, nos falta que "algo" ó "alguien" provoque recálculos en la hoja de modo transparente al usuario.

Aquí aparece la otra "perlita":
Cita:
Iniciado por 3pies Ver Mensaje
Application.OnTime
Para el post en cuestión, este método programa la ejecución de un procedimiento a una hora específica o después del transcurso de un período de tiempo específico.

Por lo tanto:
a) si a la función "Function SumColor" le agregamos el método "Application.Volatile";

b) y le agregamos -a nivel de módulo- lo siguiente:
Código:
Public Stopit As Boolean 'on top of module!

Sub ClockParaSumColor()
    If Stopit = True Then Exit Sub
    [A1].Calculate
    Application.OnTime (Now + TimeSerial(0, 0, 2)), "ClockParaSumColor"
End Sub
c) y -finalmente- agregamos como código de la "Worksheet" donde residen las sumas según el color a:
Código:
Private Sub Worksheet_Activate()
    Stopit = False
    ClockParaSumColor
End Sub
Private Sub Worksheet_Deactivate()
    Stopit = True
End Sub
el resultado será que cuando estamos en la hoja que efectúa la suma según el color, esas funciones se actualizarán cada 2 seg. Mientras que cuando cambiamos de hoja (dentro del mismo libro) el procedimiento se "auto-cancela"...

Les invito a evaluar lo antedicho y -en caso de funcionar todo correctamente- a tener en cuenta los dos métodos antes descriptos.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:38.