Function solo se ejecuta al abrir el libro

Tengo una tabla y uso una funcion creada con VBA que me hace un recuento de las celdas que tienen un fondo blanco y me devuelve la cifra. El problema es que esta función solo se ejecuta al abrir el libro, por lo que si cambio algún color en la tabla, el recuento no se actualiza. ¿Cómo lo puedo hacer?

Uso este código:

Function CountByColor(ICol As Integer, CountRange As Range)
    Application.Volatile
    Dim TCell As Range
    For Each TCell In CountRange
        If ICol = TCell.Interior.ColorIndex Then
            CountByColor = CountByColor + 1
        End If
    Next TCell
End Function
Respuesta
1

Volatile hace que la función calcule cada vez que introduces un valor en una celda.

Normalmente cada vez que eso ocurre, Excel calcula duda fórmulas y funciones, pero no actualiza las funciones personalizadas de Vba a menos que tengan eso... Pero cambiar el color a una celda ni hace que Excel piense que se amerita hacer un recalculo... por eso, sub con esa instrucción, no funciona...

Simplemente fuerza el cálculo despues de cambiar un color, aún su Excel piensa que no es necesario... presiona F9 y listo

2 respuestas más de otros expertos

Respuesta
1

Pero con esas opciones no solucioné el inconveniente de forma automática. Lo bueno es que me disteis una idea, grabé una macro pulsando la tecla y usé el comando que quedó grabado en VBA en el código de un sub.

Tengo dos botones, cada uno colorea una celda con un color y luego guarda el libro, yo necesitaba que se hiciera el recuento cada vez que se actualizara cualquier celda, entonces introduciendo esta línea de código fue la solución.

Calculate

Por poner la macro que colorea (a parte hace otras cosas que necesito también) por si a alguien le sirve en el futuro, es la siguiente (esta va en un módulo):

Sub MARCAR()
    Selection.Interior.Color = RGB(166, 166, 166)
    Selection.Borders(xlInsideVertical).Color = RGB(166, 166, 166)
    Selection.Borders(xlEdgeLeft).Color = RGB(255, 255, 255)
    Selection.Borders(xlEdgeRight).Color = RGB(255, 255, 255)
    Selection.Font.Strikethrough = False
    Calculate
    ActiveWorkbook.Save
End Sub

Y esta es la macro que crea la función personalizada (también en módulo):

Function CountByColor(ICol As Integer, CountRange As Range)
    Application.Volatile
    Dim TCell As Range
    For Each TCell In CountRange
        If ICol = TCell.Interior.ColorIndex Then
            CountByColor = CountByColor + 1
        End If
    Next TCell
End Function
Respuesta
1

Lo que puedes hacer es por ejemplo si tienes puros rojos poner una de ellas sin relleno (ojo sin relleno no es lo mismo que blanco, el código para blanco es 2 y para vacío es -4142), luego arrastras esa celda vacía hasta donde quieras y la fórmula se ira actualizando, si lo que quieres es cambiar uno a uno los colores como te mencionaron es de a fuerza darle f9

te paso la lista de colores colorindex

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas