Actualizar Función personalizada cada vez que cambio el color de una celda de un rango

Tengo la siguiente función en las celdas B13 Y B14 ambas con un color que realizan una sumatoria de un rango según el color de éstas, lo que quiero es que si cambio el color de algunas de las celdas del rango D4:D9 me vuelva a actualizar la suma de forma automática.

Function SUMARPORCOLOR(celdaColor As Range, rango As Range)
Dim resultado
Dim celda As Range
For Each celda In rango
    If celda.Interior.Color = celdaColor.Interior.Color Then
        resultado = resultado + celda.Value
    End If
Next celda
SUMARPORCOLOR = resultado
End Function

1 Respuesta

Respuesta
1

.03.03.17

Buenas tardes,

Deberías agregarle una instrucción para que se haga automáticamente como cualquier fórmula standard de MS Excel

Quedaría así:

Function SUMARPORCOLOR(celdaColor As Range, rango As Range)
Application.Volatile ' << agregué esto
'  
Dim resultado
Dim celda As Range
For Each celda In rango
    If celda.Interior.Color = celdaColor.Interior.Color Then
        resultado = resultado + celda.Value
    End If
Next celda
SUMARPORCOLOR = resultado
End Function

Desde luego, tu planilla debe estar configurada para recálculo automático o, en su defecto, actualizar con F9.

Pruébalo y dime si te funciona.

Abrazo

Fer

.

Buenas funciona solo si copio el formato y pego, pero si pulso sobre el icono de cambiar relleno no lo hace de forma automática

.

Sí es curioso que no lo haga.

Con F9 también funciona.

Saludos

Fer

.

Hola si lo controlamos desde el evento change por ejemplo:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("D4:D9")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    Application.SendKeys "%{F9}"
    Application.EnableEvents = True
End Sub

pero no funciona

.

Buenos días,

El problema con ese evento es que, para que dispare una rutina, debe haber un cambio en el contenido de una celda, no de formato.

Eventualmente podría asociarse el cálculo a un cambio de selección de celda. Pero -cada vez que cambies de celda se estaría recalculando la planilla. Si no tuvieras muchas fórmulas en ella, sería casi imperceptible. En tal caso puedes usar esta otra subrutina:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Calculate
End Sub

Es decir que cambiando  la celda de selección es como si presionaras un F9 sólo para la hoja donde estás.

Espero que sirva.

Abrazo

Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas