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

Preguntas similare

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



Respuesta Responder a este mensaje
#2 José Ignacio Bella
21/10/2003 - 08:35 | Informe spam
muchas gracias
me lo miro y si hay algún problema te lo comento

hablando de pearson, es posible que ya haya salido alguna vez en el foro,
pero...
hay alguna página (o páginas) que tengamos que ver "obligatoriamente" todos
los que queremos ir más allá en excel y vb?
rutinas comunes, trucos,... en fin, cosas que te hacen la vida un poco más
fácil

saludos




"Fernando Arroyo" escribió en el mensaje
news:
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



Respuesta Responder a este mensaje
#3 Fernando Arroyo
21/10/2003 - 11:01 | Informe spam
"José Ignacio Bella" escribió en el mensaje news:bn2k3q$s14r5$
muchas gracias
me lo miro y si hay algún problema te lo comento

hablando de pearson, es posible que ya haya salido alguna vez en el foro,
pero...
hay alguna página (o páginas) que tengamos que ver "obligatoriamente" todos
los que queremos ir más allá en excel y vb?
rutinas comunes, trucos,... en fin, cosas que te hacen la vida un poco más
fácil

saludos






Algunos enlaces interesantes en inglés:

John Walkenbach: http://j-walk.com/ss/
Chip Pearson: http://www.cpearson.com/excel/ExcelPages.htm
Jon Peltier: http://www.geocities.com/jonpeltier...index.html
David McRitchie: http://www.mvps.org/dmcritchie/excel/excel.htm
Ron de Bruin: http://www.rondebruin.nl

Y uno en español:

http://www.vbalym.netfirms.com/excel/excel.html

Yo tengo un pequeño sitio web con algunas cosillas sobre Excel:
http://www.excelsp.com

Un saludo.


Fernando Arroyo
MS MVP - Excel
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida