Macro color (2)

Buenas Paramisolo ^______^
Te vengo a hacer una pequeña consulta a ver si puedes volver a echarme una mano con la macro de colores que me estuviste ayudando hace unos días.
Esta fue la que me hiciste.
Sub Color_Rojo()
    Range("H2:H21").Select
    Do While ActiveCell.Value <> ""
    If ActiveCell.Interior.Color <> 255 Then
    ActiveCell.EntireRow.Hidden =True
    Else
    ActiveCell.EntireRow.Hidden = False
    End If
    ActiveCell.Offset(1, 0).Select
    Loop
End Sub

Habria alguna forma de hacerla de la siguiente manera?
Sub color_rojo()
    fila1 = 12 'comienza
    fila2 = 300 ' finaliza
    col = 3 ' columna C3, donde estan las teñidas de color rojo
    For fila = fila1 To fila2
     If Cells(fila, col).Interior.Color = 255 Then
         Cells(fila, col).EntireRow.Hidden = True
    Else
         Cells(fila, col).EntireRow.Hidden = False
     End If
     Next fila
End Sub

La macro va a la desde C12 a C300, y si encuentra el color rojo en cualquiera de las filas de la columna 3(c), entonces muestra esas filas que tienen el color rojo. Sino las oculta. Pero lo que sucede es que puede haber celdas en blanco que no quiero que oculte. Aparte que a la macro no se que le pasa pero no realiza bien la acción.
¿Podrías ayudarme? Un saludo y gracias

1 respuesta

Respuesta
1
Vuelves a hacerte un lío con los valores le estas diciendo que si la celda esta de color rojo la oculte, Hidden=True significa Oculta=Sí
De todas formas tanto lío para esto, si utilizas la macro que te puse marcas donde empieza y donde termina en el Loop:
Sub Color_Rojo()
    Range("C12").Select
    Do While ActiveCell.Address <> $C$300
    If ActiveCell.Interior.Color <> 255 Then
    ActiveCell.EntireRow.Hidden =True
    Else
    ActiveCell.EntireRow.Hidden = False
    End If
    ActiveCell.Offset(1, 0).Select
    Loop
End Sub
Ya está solucionado, la primera parte, ahora me dices que hay celdas en blanco que no quieres que oculte la fila, estupendo, pero todas las celdas en blanco o las que el señor le guste. Excel no es Dios y tendrás que ponerle alguna condición a parte del color del fondo de la celda que le sirva para tener en cuenta a la hora de mostrar u ocultar. Piensa que condición es esa y vamos a ponerla en la macro:
If ActiveCell.(lo que quieras que debe tener la celda o celdas contiguas, color, valor etc)= A lo que tu quieras
ActiveCell.EntireRow.Hidden =True
    Else
    ActiveCell.EntireRow.Hidden = False
Lo que necesites que haga.
>Un saludo
>Julio
Uhm me marca en rojo esto como error:
Do While ActiveCell.Address <> $C$300
Uhm, podría poner... un else de esta forma, ¿Por si es blanco que la muestre?

Sub Color_Rojo()
    Range("C12").Select
    Do While ActiveCell.Address <> $C$300
    If ActiveCell.Interior.Color <> 255 Then
    ActiveCell.EntireRow.Hidden = True
    Else
        If ActiveCell.Interior.Color <> 2 Then ' 2 para el color blanco
        ActiveCell.EntireRow.Hidden = True
        Else
        ActiveCell.EntireRow.Hidden = False
        End If
    End If
    ActiveCell.Offset(1, 0).Select
    Loop
End Sub

Si funcionase, ¿mostraría las celdas rojas y blancas no es así? Las demás las ocultaría supongo.
Un saludo
El color "Sin color" no es 2 es xlNone y entonces hay que tomar la propiedad .ColorIndex no sirve .Color que tiene otros valores para los colores, la macro según la necesitas quedaría así (antes olvidé las comillas, perdón):
Sub Color_Rojo()
    Range("C12").Select
    Do While ActiveCell.Address <> "$C$300"
    If ActiveCell.Interior.ColorIndex = 3 Or ActiveCell.Interior.ColorIndex = xlNone Then
    ActiveCell.EntireRow.Hidden = False
    Else
    ActiveCell.EntireRow.Hidden = True
    End If
    ActiveCell.Offset(1, 0).Select
    Loop
End Sub
>Un saludo
>Julio

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas