Private Sub Worksheet Change Excel

Estoy creando una planilla de Excel, en la cual necesito que me sume los valores de ciertas celdas que están coloreadas, es decir que tengo un excel con un montón de números y quiero que al colorea las celdas que elijo me sume sus valores, para eso yo no soy experta en Visual Basic ni nada menos, pero encontré en la web el siguiente código:

Function SumarUsandocolor(CeldaConColorASumar As Range, RangoaSumar As Range)
        Cada vez que haya un cambio en la hoja, hace que la formula se recalcule
Application. Volatile
       'Declaro una variable para almacenar el color de referencia
Dim ColorReferencia As Integer
       'Declaro una variable para almacenar la celda actual de un rango a sumar
Dim CeldaEnRango As Range
       'Inicializamos la variable que contiene el color de referencia
'con el valor del color de la celda pasada como primer argumento
ColorReferencia = CeldaConColorASumar.Interior.ColorIndex
       'Bucle recorriendo cada una de las celdas del rango a sumar
For Each CeldaEnRango In RangoaSumar
       'Si el color de la celda de referencia coincide con el color
'de la celda actual entonces acumulo el valor de la celda
'para sumarlo
If ColorReferencia = CeldaEnRango.Interior.ColorIndex Then
SumarUsandocolor = SumarUsandocolor + CeldaEnRango.Value
End If
Next CeldaEnRango
End Function

Este código funciona bien, lo que no me hace es que no me actualiza al momento de re abrir el excel, o cambiar algun parámetro, por eso quería utilizar la función de arriba que está en el título, para que siempre se esté actualizando, busqué en varias preguntas que se han posteado aquí y lo que debería de hacer es poner este código dentro de Private Sub Worksheet Change y End Sub, pero la momento de compilarlo me dice que End Sub no está puesto, ya he intentado varias cosas y nada. ¿Está errado lo que estoy haciendo? Literalmente estoy haciendo lo siguiente:

Private Sub Worksheet_Change(ByVal Target As Range)

Function SumarUsandocolor(CeldaConColorASumar As Range, RangoaSumar As Range)
        Cada vez que haya un cambio en la hoja, hace que la formula se recalcule
Application.Volatile
       'Declaro una variable para almacenar el color de referencia
Dim ColorReferencia As Integer
       'Declaro una variable para almacenar la celda actual de un rango a sumar
Dim CeldaEnRango As Range
       'Inicializamos la variable que contiene el color de referencia
'con el valor del color de la celda pasada como primer argumento
ColorReferencia = CeldaConColorASumar.Interior.ColorIndex
       'Bucle recorriendo cada una de las celdas del rango a sumar
For Each CeldaEnRango In RangoaSumar
       'Si el color de la celda de referencia coincide con el color
'de la celda actual entonces acumulo el valor de la celda
'para sumarlo
If ColorReferencia = CeldaEnRango.Interior.ColorIndex Then
SumarUsandocolor = SumarUsandocolor + CeldaEnRango.Value
End If
Next CeldaEnRango
End Function

End Sub

Cualquier ayuda es bienvenida!

2 Respuestas

Respuesta
2

H o la: Te anexo unos comentarios.

El detalle está en que cuando cambias de color una celda, no se activa ningún evento.

Te explico. El evento "Private Sub Worksheet Change", se activa cuando modificas el valor de una celda. Cambiar el color o el font de una celda no modifica el valor de la celda, por eso no se activa el evento Change.

Lo que podemos hacer es verificar varios eventos.

El primero es cuando abres el archivo, en ese momento calcularemos la función SumarUsandocolor(), así que deja la función SumarUsandocolor dentro de un módulo.

Function SumarUsandocolor(CeldaConColorASumar As Range, RangoaSumar As Range)
    'Cada vez que haya un cambio en la hoja, hace que la formula se recalcule
    Application. Volatile
    'Declaro una variable para almacenar el color de referencia
    Dim ColorReferencia As Integer
    'Declaro una variable para almacenar la celda actual de un rango a sumar
    Dim CeldaEnRango As Range
    'Inicializamos la variable que contiene el color de referencia
 'con el valor del color de la celda pasada como primer argumento
    ColorReferencia = CeldaConColorASumar.Interior.ColorIndex
    'Bucle recorriendo cada una de las celdas del rango a sumar
    For Each CeldaEnRango In RangoaSumar
        'Si el color de la celda de referencia coincide con el color
 'de la celda actual entonces acumulo el valor de la celda
 'para sumarlo
        If ColorReferencia = CeldaEnRango.Interior.ColorIndex Then
            SumarUsandocolor = SumarUsandocolor + CeldaEnRango.Value
        End If
    Next CeldaEnRango
End Function

Nota: Revisa que la siguiente línea tenga el apostrofe al principio, de lo contrario te marcará error

'Cada vez que haya un cambio en la hoja, hace que la formula se recalcule

Ahora, pon el siguiente evento en Thisworkbook:

Private Sub Workbook_Open()
    Calculate
End Sub

Instrucciones para poner la macro en los eventos ThisWorkbook

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a ThisWorkbook
  4. En el panel del lado derecho copia la macro

Pon los siguientes eventos en tu hoja:

Private Sub Worksheet_Activate()
    Calculate
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    Calculate
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Calculate
End Sub

Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja)
  4. En el panel del lado derecho copia la macro

Si modificas el valor de cualquier celda de tu hoja, la función se actualizará.

Pero si modificas el color de una celda, la función no se actualizará, para ello bastará simplemente que selecciones cualquier celda de la hoja, al seleccionar cualquier celda se recalculará la función.

Prueba y me comentas, si tienes dudas de cómo poner los eventos, avísame.


'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Justo había encontrado una solución pero gracias a tu respuesta me ha quedado mucho más claro! Te agradezco mucho! Saludos! 

Respuesta
1

Checa si te sirve el procedimiento que esta en este link

http://sintad.com.mx/macros%20excel/macro%20que%20asigna%20colores%20a%20una%20lista%20de%20valores%20con%20base%20en%20una%20condici%C3%B3n%20y%20los%20cuenta.html 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas