Codigo para eliminar filas de cierto color

Tengo un libro el cual contiene

14 hojas de las cuales se van rellenando de filas verdes de acuerdo a un criterio

Lo que necesito es crear otro libro con el nombre consecutivo al anterior

¿Por qué consecutivo? Lo que pasa es que le tengo dado nombre de meses ejemplo

Si tengo el libro de mayo el que sigue es junio solo que el detalle esta que al crear el libro posterior.

tiene que sucedes algo asi..

En el libro "mayo" tiene un rango de A1:A100 el cual algunas de esas filas estan en color verde...

Para crear "JUNIO",

"mayo" tiene que guardar cambios y copiar la informacion en "JUNIO" solo que en junio solo debe pegar las filas que no sean de color verde. Al mismo tiempo que acomoda las filas para que no queden vacias ejemplo:

Mayo

junio

espero su ayuda gracias

todo esto estaria bueno que al ejecutar esto lo realice:

Sub CAMBIONOMBRE()
'
' Macro1 Macro
'
MsgBox "Al cambiar el nombre Crearas Otro archivo con el nombre que pusiste", vbOKOnly + vbExclamation, "ADVERTENCIA"
c_Nombre = InputBox("Directorio y nombre del fichero", "Guardar como...")
If Len(c_Nombre) > 0 Then
ActiveWorkbook.SaveAs Filename:=c_Nombre, _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, _
CreateBackup:=False
Call CerrarArchivo
End If
End Sub

1 respuesta

Respuesta
1

H o l a:

Te anexo la macro. El programa busca el mes en el nombre del archivo, si dice:

"ventas mayo 2015.xlsm"

En automático el nuevo archivo se llamará

"ventas junio 2015.xlsm"


La macro borra todas las filas verdes, recuerda que el color para excel es un número, en este caso estoy suponiendo que el color de las celdas es el número 4, si es otro número tendrás que cambiarlo en la macro en esta línea:

If h.Cells(i, "A").Interior.ColorIndex = 4 Then


La macro:

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 = 4 Then
                h.Rows(i).Delete
            End If
        Next
    Next
    l2.Save
    MsgBox "Terminado"
End Sub

S a l u d o s . D a n t e   A m o r.

ME sale el recuado

error en tiempo de ejecución error 1004

Error definido por la aplicación o el objeto

¿Y en qué fila de la macro se detiene?

¿Cómo se llama tu archivo?

¿Tienes hojas ocultas o protegidas?

Si tengo hojas ocultas y todas están protegidas, además que tengo un código que no me permite cerrar el archivo como normalmente se cierra "X"

Solamente para probar, muestra todas las hojas, desprotege todas las hojas, quita tu código que no te permite cerrar. Ejecuta mi macro.

Hice lo que me dijiste

FUNCIONA

Pero me sale error en esta parte

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("e" & Rows.Count).End(xlUp).Row To 1 Step -1
If h.Cells(i, "e").Interior.ColorIndex = 43 Then
h.Rows(i).Delete
End If

Me sale:

Error 1004 en tiempo de ejecución

Error en el método delete de la clase range y marca esto en amarillo:

h.Rows(i).Delete

Eso es porque la hoja está protegida.

Tienes que desproteger las hojas, revisa tus macros para ver si están protegiendo las hojas en automático.

O agrega esto a la macro:

If h.Cells(i, "e").Interior.ColorIndex = 43 Then

h.unprotect "abc"
h.Rows(i).Delete
End If

Cambia "abc" por el password que tengan las hojas

SI ahora si funciona!

¿Abro otra pregunta? Lo que pasa es que en ese código necesitaría un consecutivo de números de un rango.

Sí, abre otra pregunta y me explicas con detalle lo que necesitas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas