Macro para Limpieza de libro Excel (reducción de peso)

Podrías tu tratar de que no me elimine Shapes, ¿imágenes o colores de fondo de las celdas?.

La macro no me la deja introducir, me menciona algo sobre la cantidad, te la enviare dentro de un libro donde puedes probarla

Los eventos incluidos, todos trabajan en conjunto

Luego en otra pregunta, quiero incluirle el passw para que auto-desproteja y al terminar que vuelve a proteger las hojas con el mismo passw para que no pregunte porque en realidad trate de meterle dicha línea Unprotect y Protect y no resulto, no encuentro donde meterle

Respuesta
-1

Mándame el archivo
Email:
[email protected]

Te envíe el archivo amigo Luis

Espero puedas darle clavo al asunto

Te mando el archivo

Hola Luis.

Esta igual el archivo (macro) no hace lo que pedí que es no eliminar el color de fondo

Te dejo imágenes de antes y después

Antes

En esta 1ª ves que las celdas están con color de fondo pero solo las 1ªs celdas son las que tienen texto y con color de fondo, las otras no contienen ningún contenido pero con color de fondo, son celdas vacías, el texto esta en las celdas anteriores

Después

En esta ultima ves que solo las celdas que ves con color de fondo son las que contienen el texto, las otras sin color de fondo, son celdas vacías, el texto esta en las celdas anteriores.

Ejecuta tu mismo la macro para que te des cuenta de como queda

Yo no uso eso que tienes tu

Mira el peso que tenia y el que tiene es la mitad yo uso otras cosas

Ok amigo Luis, pásame entonces el que tu usas que no borra el color de fondo, porque el archivo que me enviaste fue o es lo mismo que te envíe sin cambios.

Para limpiar las macros tengo, este es para limpieza de hojas

Es que yo no pido que me lo limpien, si no que acomodar la macro, porque entonces tendría que subir miles de archivos y no es esa mi pregunta o pedido

A un cocinero, nunca da la verdadera receta.

Eso que estas usando, es para archivos de 50 megas para arriba

1 respuesta más de otro experto

Respuesta
1

Ajusta la macro:

 With ActiveWorkbook
        TI = VBA.FileLen(.FullName)
        For Each hj In .Worksheets
            If hj.Name <> "Ayuda" Then
                ffin = 1
                cfin = 1
                With hj
                    ' Anulada por Gerson Pineda
                    On Error Resume Next
                    ffin = .UsedRange.Find(what:="*", LookIn:=xlFormulas, _
                            SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
                    cfin = .UsedRange.Find(what:="*", LookIn:=xlFormulas, _
                            SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
                    On Error GoTo 0
                    If .ProtectContents Then
                        If MsgBox("La hoja " & .Name & " se encuentra protegida." & vbLf & vbLf & _
                                  "No se podrán limpiar los rangos de esta hoja a menos que se desproteja." _
                                  & vbLf & vbLf & "¿Desea desprotegerla antes de continuar?", vbYesNo, _
                                  "¡Hoja protegida!") = vbYes Then
                            If Desproteger(hj) Then
                                Limpiar hj, ffin, cfin
                            Else
                                MsgBox "No se ha desprotegido la hoja.", vbCritical, "¡Clave incorrecta!"
                            End If
                        End If
                    Else
                        Limpiar hj, ffin, cfin
                    End If
                End With
            End If
        Next hj
        .Save
        TF = VBA.FileLen(.FullName)
    End With

Sal u dos

¿Pero si tengo en un libro más que 1 hoja? 3, 5, 10, 12 hojas

El modulo no lo tengo fijo en algún libro, lo tengo en un modulo en una carppeta donde tengo más módulos que uso siempre que quiero.

Ese lo importo al libro para usarlo y luego lo quito

Suponiendo que tienes la macro Limpiar_rangos en el libroX; la macro la puedes ejecutar en cualquier libroY, solamente tienes que poner el libroY activo, ir a VBA y ejecutar la macro Limpiar_rangos.

Sal u dos

Dices; La puedes usar en otro libro, la macro funciona para todas las hojas que tiene el libro.

Eso esta bien, solo un comentario a tu opción, rayos, siempre hay un pero

Yo importo el modulo al libro a limpiar, al terminar lo quito del libro.

Si tengo decenas de libros o, digamos que voy a limpiar 10 libros, unos con más y otros con menos hojas y la maioria en las cuales hay celdas rango con colores de fondo, ¿tener que colocar espacios a todos los rangos de cada hoja, es algo que mmmmm.

Hace días atrás, estuve con un libro e 24 hojas (2 por mes) las cuales tienen color de fondo algunas vacías (algo así similar a eso.

La 1ª es UNA de las portadas de algunos archivos

Esta es de algunas hojas y las demas son similares

Imaginate colocar espacios en todos rangos de tanta hoja.

Sabes que siempre digo; si se puede muy bien, si no pues a llorar al valle jejejjejej, nadie se va a morir por eso, a pesar de que la tensión arterial me esta atacando sin dejarme hacer nada en mi trabajo

DAM, ¿me pregunto si tienes alguna otra forma de hacer dicha limpieza?

¿Alguna otra macro?

Primero, no tienes que copiar la macro a otro libro. Solamente abre el libro, entra a VBA y ejecuta la macro. La macro se ejecuta en el libro que esté activo, me explico.

Segundo, la macro se encarga de "limpiar" todas las celdas que no tienen información, y por información, me refiero a algún dato en la celda, es decir, un espacio o una letra, si la celda no tiene un dato, entonces es candidata a ser "limpiada", esa "limpieza" incluye los formatos de la celda, es decir, colores y fuentes de letra.

Por último, tendrás que llorar, o no utilizas la macro en los libros, que tienen hojas, que tienen celdas con colores. O entras a cada hoja, por única vez, y les pones información a la celda que quieras que sea la última celda con información, para que la macro limpie de ahí hacia abajo y hacia la derecha.

Sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas