Borrar contenido de filas (rango) si contiene color especifico

Me han ayudado por un experto sobre un código que si detecta un color elimina toda una fila... Mi caso es que (no em di cuenta) que hay una hoja que tiene fórmulas de INDIRECTO y uso filas columnas y nombres de hojas, entonces al ejecutar el código mi fórmula cambia y se mueve todo... Aun estén referenciados...

Este es el código que me han proporcioando

Sub CopiarMes()
'Por.Dante Amor
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set l1 = ThisWorkbook
ruta = l1.Path & "\"
meses = Array("", "ENERO", "FEBRERO", "MARZO", "ABRIL", "MAYO", "JUNIO", "JULIO", _
"AGOSTO", "SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE")
nombre = l1.Name
punto = InStrRev(nombre, ".")
nombre = Left(nombre, punto - 1)
For i = 1 To UBound(meses)
If InStr(1, UCase(nombre), meses(i)) > 0 Then
If i = 12 Then
nvo = "ENERO"
ant = "DICIEMBRE"
Else
nvo = meses(i + 1)
ant = meses(i)
End If
Exit For
End If
Next
'
nvonombre = Replace(UCase(nombre), ant, nvo)
l1.SaveCopyAs ruta & nvonombre & ".xlsm"
Set l2 = Workbooks.Open(ruta & nvonombre & ".xlsm")
For Each h In l2.Sheets
For i = h.Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
If h.Cells(i, "A").Interior.ColorIndex = 43 Then
h.Unprotect
h.Rows(i).Delete
h.Protect
End If
Next
Next
l2.Save
MsgBox "Terminado"
End Sub

Funciona excelente

Pero si en vez de eliminar completamente las filas este solo me borra los contenidos (formatos y contenido) y que sea en determinado rango de filas ejemplo:

El rango seria A1:G100 si en este rango detecta...

La fila A9 con colorindex 43 entonces me borre los contenidos a partir de A9 hasta A100 ya que ahí termina mi rango... Algo así:

If h.Cells(i, "A1:A100").Interior.ColorIndex = 43 Then
h.Unprotect
h.Rows(i).clearcontents
h.Protect

1 Respuesta

Respuesta
1

H o l a :

Entonces esta instrucción no te funciona:

h. Rows(i). Clearcontents

Prueba esta

h. Rows(i). Clear

pero como pongo el rango? esta bien como lo tengo puesto ahi=???

¿Quieres borrar las celdas que estén de color verde?

¿O toda la fila?

Si quieres toda la fila:

    For Each h In l2.Sheets
        For i = 1 To 100
            If h.Cells(i, "A").Interior.ColorIndex = 43 Then
                h.Unprotect
                h.Rows(i).Clear
                h.Protect
            End If
        Next
    Next

Si quieres borrar celda por celda:

    For Each h In l2.Sheets
        For i = 1 To 100
            For Each c In h.Range("A" & i & ":G" & i)
                If c.Interior.ColorIndex = 43 Then
                    h.Unprotect
                    c.Clear
                    h.Protect
                End If
            Next
        Next
    Next

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas