detectar un formato condicional desde vb

19/10/2003 - 20:25 por José Ignacio Bella | Informe spam
hola, tengo unas celdas en una hoja de cálculo cuyo contenido se pinta de
rojo si cumplen una determinada condicion (uso formato condicional)

sabe alguien cómo puedo detectar de qué color están desde una rutina vb?
sé hacerlo cuando soy yo quien las pinta manualmente de rojo
(range.font.colorindex), pero no consigo salirme cuando trabajo con el
formato condicional.
hay alguna forma de saber el color resultante (o si cumple la condición del
formato?)


gracias por adelantado
 

Leer las respuestas

#1 Fernando Arroyo
20/10/2003 - 11:19 | Informe spam
Yo he usado alguna vez estas dos funciones escritas por Chip Pearson:

Function ColorIndexOfCF(Rng As Range, Optional OfText As Boolean = False) As Integer

Dim AC As Integer
AC = ActiveCondition(Rng)

If AC = 0 Then
If OfText = True Then
ColorIndexOfCF = Rng.Font.ColorIndex
Else
ColorIndexOfCF = Rng.Interior.ColorIndex
End If
Else
If OfText = True Then
ColorIndexOfCF = Rng.FormatConditions(AC).Font.ColorIndex
Else
ColorIndexOfCF = Rng.FormatConditions(AC).Interior.ColorIndex
End If
End If

End Function


Function ActiveCondition(Rng As Range) As Integer

Dim Ndx As Long
Dim FC As FormatCondition

If Rng.FormatConditions.Count = 0 Then
ActiveCondition = 0
Else
For Ndx = 1 To Rng.FormatConditions.Count
Set FC = Rng.FormatConditions(Ndx)
Select Case FC.Type
Case xlCellValue
Select Case FC.Operator
Case xlBetween
If CDbl(Rng.Value) >= CDbl(FC.Formula1) And _
CDbl(Rng.Value) <= CDbl(FC.Formula2) Then
ActiveCondition = Ndx
Exit Function
End If

Case xlGreater
If CDbl(Rng.Value) > CDbl(FC.Formula1) Then
ActiveCondition = Ndx
Exit Function
End If

Case xlEqual
If CDbl(Rng.Value) = CDbl(FC.Formula1) Then
ActiveCondition = Ndx
Exit Function
End If

Case xlGreaterEqual
If CDbl(Rng.Value) >= CDbl(FC.Formula1) Then
ActiveCondition = Ndx
Exit Function
End If

Case xlLess
If CDbl(Rng.Value) < CDbl(FC.Formula1) Then
ActiveCondition = Ndx
Exit Function
End If

Case xlLessEqual
If CDbl(Rng.Value) <= CDbl(FC.Formula1) Then
ActiveCondition = Ndx
Exit Function
End If

Case xlNotEqual
If CDbl(Rng.Value) <> CDbl(FC.Formula1) Then
ActiveCondition = Ndx
Exit Function
End If

Case xlNotBetween
If CDbl(Rng.Value) <= CDbl(FC.Formula1) Or _
CDbl(Rng.Value) >= CDbl(FC.Formula2) Then
ActiveCondition = Ndx
Exit Function
End If

Case Else
Debug.Print "UNKNOWN OPERATOR"
End Select

Case xlExpression
If Application.Evaluate(FC.Formula1) Then
ActiveCondition = Ndx
Exit Function
End If

Case Else
Debug.Print "UNKNOWN TYPE"
End Select

Next Ndx

End If

ActiveCondition = 0

End Function


Por ejemplo, para almacenar en una variable llamada intColor el color de la celda A1 de la hoja activa establecido por su formato condicional, la instrucción sería:

intColor = ColorIndexOfCF(ActiveSheet.Range("A1"))

Un saludo.


Fernando Arroyo
MS MVP - Excel


"José Ignacio Bella" escribió en el mensaje news:bn039q$rg4l6$
hola, tengo unas celdas en una hoja de cálculo cuyo contenido se pinta de
rojo si cumplen una determinada condicion (uso formato condicional)

sabe alguien cómo puedo detectar de qué color están desde una rutina vb?
sé hacerlo cuando soy yo quien las pinta manualmente de rojo
(range.font.colorindex), pero no consigo salirme cuando trabajo con el
formato condicional.
hay alguna forma de saber el color resultante (o si cumple la condición del
formato?)


gracias por adelantado



Preguntas similares