Colorines y código

13/01/2010 - 13:49 por Merlucio | Informe spam
Buscando ejemplos aqui y alla, he logrado encontrar este codigo (que
funciona) para que cambie el color de la celda al seleccionar de una
lista desplegable:

Private Sub Worksheet_Change(ByVal Target As Range)
If (Intersect(Target, Me.[A:A]) Is Nothing) Or
Target.Columns.Count > 1 Then Exit Sub

Dim strPruebaValidación As String
Set Target = Target.Cells(1, 1)

On Error GoTo captura
strPruebaValidación = Target.Validation.Formula1
On Error GoTo 0

Application.EnableEvents = False
WorksheetFunction.Index(Range(Target.Validation.Formula1),
WorksheetFunction.Match(Target.Value, Range
(Target.Validation.Formula1), 0), 1).Copy
Target.PasteSpecial Paste:=xlPasteFormats
Target.Select
Application.EnableEvents = True
Application.CutCopyMode = False

Exit Sub

captura:
Exit Sub
End Sub

Resulta que si añado una funcion en un modulo que necesito para otra
cosa, y que cuenta las celdas de determinado color, la funcion
funciona, valgame la redundancia, pero lo anterior deja de funcionar.
La funcion es:

Function contarfondo(rng As Range, rng2 As Range) As Double
Application.Volatile True
Dim celdas As Range
Dim contando As Integer

contando = 0

For Each celdas In rng.Cells
If celdas.Interior.ColorIndex = rng2.Interior.ColorIndex Then
contando = contando + 1
End If
Next celdas
contarfondo = contando
End Function

¿Alguien sabe por que pasa esto?
 

Leer las respuestas

#1 Héctor Miguel
14/01/2010 - 06:29 | Informe spam
hola, !

una cosa es "contar" colores aplicados "a chaleco"... (<celda>.Interior.Colorindex)
y otra (MUY diferente) es... "contar" colores aplicados por formato condicional

si lo que necesitas es contar por colores segun el formato condicional...
podrias usar "simples" funciones de hoja de calculo como sumaproucto(...
aprovechando la misma condicion por la que se aplica el formato al rango donde contar (?)

saludos,
hector.

__ OP __
Buscando ejemplos aqui y alla, he logrado encontrar este codigo (que funciona)
para que cambie el color de la celda al seleccionar de una lista desplegable:

Private Sub Worksheet_Change(ByVal Target As Range)
If (Intersect(Target, Me.[A:A]) Is Nothing) Or Target.Columns.Count > 1 Then Exit Sub
Dim strPruebaValidación As String
Set Target = Target.Cells(1, 1)
On Error GoTo captura
strPruebaValidación = Target.Validation.Formula1
On Error GoTo 0
Application.EnableEvents = False
WorksheetFunction.Index(Range(Target.Validation.Formula1), WorksheetFunction.Match(Target.Value, Range(Target.Validation.Formula1), 0), 1).Copy
Target.PasteSpecial Paste:=xlPasteFormats
Target.Select
Application.EnableEvents = True
Application.CutCopyMode = False
Exit Sub
captura:
Exit Sub
End Sub

Resulta que si añado una funcion en un modulo que necesito para otra cosa
y que cuenta las celdas de determinado color, la funcion funciona, valgame la redundancia, pero lo anterior deja de funcionar.
La funcion es:

Function contarfondo(rng As Range, rng2 As Range) As Double
Application.Volatile True
Dim celdas As Range
Dim contando As Integer
contando = 0
For Each celdas In rng.Cells
If celdas.Interior.ColorIndex = rng2.Interior.ColorIndex Then
contando = contando + 1
End If
Next celdas
contarfondo = contando
End Function

Alguien sabe por que pasa esto?

Preguntas similares