Modificar formato de un archivo de excel con macro

Hola que tal Edwinhenao !
Disculpa necesito ayuda sobre macros necesito hacer una macro que haga lo siguiente:
Tengo una aplicación en Java la cual exporta documentos a excel (Reportes) con un formato predefinido (Tipo de letra, Color de letra, tamaño de filas, tamaño de columnas etc... )
1.- La macro se debe aplicar a cualquier archivo de excel.
2.- Si el archivo de excel tiene una hoja o varias hojas debe aplicarse en ambos casos.
3.- Quitar cualquier tipo de formato en cuanto a bordes, color de letra, tamaño de letra, combinación de celdas.
4.- Quitar Columnas vacías y filas vacías, pero necesito que me deje los tamaños de filas y columnas tal cual están de las que si tienen información.
5.- Debe quitarme cualquier imagen.
6.- Y también debe eliminarme las filas en las que se encuentre el siguiente texto "página 1 de"
7.- La cantidad de datos es indefinido puede tener POR cantidad de Datos por Hoja.
He investigado acerca de código que haga lo que quiero pero no he podido resolverlo ya que no tengo muchos conocimientos de visual basic.
Te pido de la manera más atenta que me ayudes por favor! Te lo agradecería infinitamente.
A continuación te dejo el código que he encontrado.
Sub EliminaImagenes()
'macro desarrollada por Elsamatilde 26/05/08
'http://galeon.com/aplicaexcel
N = ActiveSheet.Shapes.Count
For i = N To 1 Step -1
'controla el tipo de objeto y elimina si se trata de Picture
On Error Resume Next
ActiveSheet.Shapes(i).Select
If Left(ActiveSheet.Shapes(i).Name, 7) = "Picture" Or Left(ActiveSheet.Shapes(i).Name, 5) = "Image" Then
ActiveSheet.Shapes(i).Delete
End If
Next
End Sub
Sub EliminarFormato()
    Cells.Select
    With Selection.Font
        .Name = "Arial"
        .Size = 10
        .Bold = False
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
    Selection.Hyperlinks.Delete
    Selection.RowHeight = 12.75
    Cells.EntireColumn.AutoFit
    ' Fuera controles de formulario
    If ActiveSheet.Shapes.Count > 0 Then
        ActiveSheet.Shapes.SelectAll
        Selection.Delete
    End If
    ' Movemos el foco a la primera celda
    Range("A1").Select
End Sub
Sub SuprimirColumnas()
Dim cCount As Integer, c As Integer
Dim DeleteRange As Range
Set DeleteRange = ActiveSheet.Range("A1:D10")
If DeleteRange Is Nothing Then Exit Sub
If DeleteRange.Areas.Count > 1 Then Exit Sub
With DeleteRange
 cCount = .Columns.Count
  For c = cCount To 1 Step -1
   If Application.CountA(.Columns(c)) = 0 _
    Then .Columns(c).EntireColumn.Delete
Next c
End With
End Sub
Sub EliminarFilasEnBlanco()
Dim strC As String, lngFila As Long
With Worksheets("Hoja1")
For lngFila = 1 To 10
If WorksheetFunction.CountA(.Range("A" & lngFila & ":" & "CZ" & lngFila)) = 0 _
Then strC = strC & "A" & lngFila & ":" & "CZ" & lngFila & ","
Next lngFila
Application.ScreenUpdating = False
.Range(Left(strC, Len(strC) - 1)).Delete
Application.ScreenUpdating = True
End With
End Sub
PD. De antemano Gracias ! Espero su pronta respuesta!

1 Respuesta

Respuesta
1
¿Hay alguna forma de identificar el rangode datos? Necesitamos la última celda con dato o la última columna y la última fila.
Debemos identificar algún patrón: por ejemplo sí en la fila uno van títulos y están completos de esa manera sabremos la última columna o sí en la columna A siempre hay datos (no hay vacíos) de esa manera podríamos saber la última fila. Esto disminuiría el tiempo de ejecución de la macro, especialmente en la eliminación de filas y columnas vacías. Para todo lo demás puedes utilizar estas dos macros. No olvides calificar y cerrar la pregunta. O espero si hay alguna manera de identificar el rango para eliminar las filas y columnas vacías (podría ser algo como que nunca hay datos más allá de AAA200000).
...
Sub LimpiarFormatos()
For i = 1 To Worksheets.Count
Worksheets(i).Select
'Limpiar formatos
    Cells.Select
    Selection.Hyperlinks.Delete
    With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.UnMerge
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    With Selection.Font
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
    End With
    With Selection.Font
        .Name = "Calibri"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With
' Eliminar imagenes
For Each objeto In ActiveSheet.Shapes
    objeto.Delete
Next
'Eliminar filas que contengan "pagina 1 de"
Call BorrarTodaFilaConPagina1
Cells.EntireColumn.AutoFit
Next i
Worksheets(1).Select
Range("A1").Select
End Sub
Sub BorrarTodaFilaConPagina1()
'Eliminar filas que contengan "pagina 1 de"
On Error GoTo ControlError
Range("A1").Select
For c = 1 To 1000000
    Cells.Find(What:="pagina 1 de", After:=ActiveCell, LookIn:=xlFormulas, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
    ActiveCell.EntireRow.Delete
Next
Exit Sub
ControlError:
End Sub
Hey Muchas gracias amigo !
¿Me a funcionado muy bien tu respuesta solo una cosa más no se si tengo que finalizar esta y abrir otra?
Ya solo necesito validar del cuadro de dialogo abrir
Si le dan cancelar que se cierre el archivo que contiene la macro o si le presionan [x] de la ventana que también se cierre el archivo que contienen la macro.
Y una más si tengo varías hojas que se aplica la macro a todas las hojas ...
Aprovechando tu amabilidad brother !
Está macro se ejecuta en todas la hojas del libro donde la ejecutes... lo de validar el cuadro de dialogo abrir, no estoy seguro de que se pueda hacer... Éxitos.

Añade tu respuesta

Haz clic para o