Conocer el autofiltro que se ha ejecutado

Hola otra vez.
Estoy intentando cambiar de color las cabeceras de las columnas filtradas por autofiltro.
He conseguido cambiar el color de una columna, pero cuando tengo más de una columna con autofiltro, no se como puedo diferenciar una de la otra.
He intentado hacer un for, y con esto mirar cual esta activo y cual no. Lo malo es que tampoco puedo concretar cuantas columnas están con autofiltro y no se cual puede ser el rango del for (por que si se pasa casca).
Mi pregunta es: ¿Hay alguna manera de saber cual de los autofiltros se ha utilizado, para poder aplicar el código solo a ese autofiltro?
No se si me explico, es que soy nuevo en el tema, y lo que intento es bastante complicado :(
Respuesta
1
Q+ Argosen,
Ve probando con este código:
Private Sub Worksheet_Calculate()
With Worksheets("Data")
If .AutoFilterMode Then
With .AutoFilter.Filters(1)
If .On Then C1 = .Criteria1
Range("D1").Value = C1
End With
End If
End With
End Sub
Ya he probado ese código, pero el 1 de la sentencia With .AutoFilter.Filters(1) hace referencia directa a la primera columna autofiltrada.
El problema es que cuando tengo más de una columna autofiltrada, no tengo forma de saber cual es la columna que esta filtrando, y en consecuencia no puedo cambiar el color de esa cabecera en concreto.
Lo que necesitaría saber es el numero que tengo que poner en vez de 1.
Gracias por responder, pero ya he conseguido solucionarlo.
Hago un bucle para poder mirar una a una las columnas con autofiltro, y cambiar el color de cada una que este encendida.
Este es el código, por si te interesa:
Private Sub Filtro_Resaltar(ByVal horizontal1, horizontal2, vertical1, vertical2 As Integer)
Dim coll As Integer
Dim i As Integer
Dim Ws As Worksheet
Set Ws = ActiveCell.Worksheet
i = 1
If Ws.AutoFilterMode Then
Call reset(horizontal1, horizontal2, vertical1, vertical2) ' metodo para ponerlos todos en color normal
For coll = horizontal1 To horizontal2 Step 1
With Ws.AutoFilter.Filters(i)
If .On Then
Ws.Cells(vertical1 - 1, coll).Interior.Color = RGB(255,0,0)
Else
Ws.Cells(vertical1 - 1, coll).Interior.Color = RGB(0,255,0)
End If
End With
i = i + 1
Next
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas