¿Macro qué se ejecute en todos los libros que se llamen igual?

Dante me puedes ayudar con una macro que se ejecute en todos los libros que se llamen igual. Tengo 50 carpetas cada carpeta tiene 12 libros que representan los meses del año(Enero 18, Febrero 18, etc...) Si quiero solo que la macro se ejecute en los libros que se llamen Enero 18, ¿me puedes ayudar eso por favor? Ya tengo el código que realizara el trabajo en cada libro la duda es como aplicar ese código a todos los libros que se llamen igual.

1 Respuesta

Respuesta
3

Te anexo la macro para que adaptes tu código.

Cambia la ruta inicial donde empiezan tus 50 subcarpetas y también cambia el nombre del archivo con todo y extensión.

    ruta_inicial = "C:\trabajo\"
    arch_inicial = "Enero 18.xlsx"



Sub Ejecutar_Macro()
'Por Dante Amor
    ruta_inicial = "C:\trabajo\"
    arch_inicial = "Enero 18.xlsx"
    '
    Set fso = CreateObject("scripting.filesystemobject")
    Set carpeta = fso.getfolder(ruta_inicial)
    For Each subcarpeta In carpeta.subfolders
        If Dir(subcarpeta & "\" & arch_inicial) <> "" Then
            Set l2 = Workbooks.Open(subcarpeta & "\" & arch_inicial)
            '
            'aquí debe ir tu código para trabajar con el objeto l2
            'inicia código
                '
                'Por ejemplo, poner la palabra "Hola" en el libro, en la hoja1, celda B2
                Set h2 = l2.Sheets("Hoja1")
                h2.Range("B2").Value = "Hola"
                '
            'FIN CÓDIGO
            '
            'guardar libro 2 y cerrar
            l2.Close True
        End If
    Next
    MsgBox "Fin"
End Sub

'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Hola Dante, me puedes ayudar por favor. Intente ejecutarla y no me funciono para ello tengo las siguientes consultas:

1) En un libro nuevo en el editor de visual basic pego y ejecuto la macro, ¿en la carpeta que contiene las subcarpetas?

2) Asi lo hice y me dio un mensa de ""Block If without End If ""

3) La ruta inicial y el nombre con extencion del archivo es:

ruta_inicial = "C:\Users\crenderos\Desktop"
arch_inicial = "Enero 18.xlsx"

3) el codigo que le pegue  tu codigo es el siguiente:

Sub Ejecutar_Macro()
'Por Dante Amor
ruta_inicial = "C:\Users\crenderos\Desktop"
arch_inicial = "Enero 18.xlsx"
'
Set fso = CreateObject("scripting.filesystemobject")
Set carpeta = fso.getfolder(ruta_inicial)
For Each subcarpeta In carpeta.subfolders
If Dir(subcarpeta & "\" & arch_inicial) <> "" Then
Set l2 = Workbooks.Open(subcarpeta & "\" & arch_inicial)
'
'aquí debe ir tu código para trabajar con el objeto l2
'inicia código
'
'Sub Poner_Datos()

Application.ScreenUpdating = False
Range("B:F").EntireColumn.Insert
u = Range("A" & Rows.Count).End(xlUp).Row
Range("B10:B" & u).Value = 1
Range("C10:C" & u).Value = 2018
Range("D10:D" & u).Formula = "=DATE(RC[-1],RC[-2],RC[-3])"
Range("D10:D" & u).Copy
Range("E10").PasteSpecial xlPasteValuesAndNumberFormats
Range("A9").Copy
Range("F10").PasteSpecial xlPasteValuesAndNumberFormats
Application.CutCopyMode = False
Range("F11:F" & u).Value = Range("F10")
Columns("F:F").Select
Range("F7").Activate
With Selection
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = -1
.ShrinkToFit = False
.ReadingOrder = xlContext
End With
Range("F8").FormulaR1C1 = "SUCURSAL"
Range("E8").FormulaR1C1 = "FECHA"
Range("B:D").EntireColumn.Delete

Rows("9:9").Select
Selection.Delete Shift:=xlUp
ActiveWindow.SmallScroll Down:=-6

End Sub

'guardar libro 2 y cerrar
l2.Close True
End If
Next
MsgBox "Fin"
End Sub

En esta línea te falta la diagonal \ al final

ruta_inicial = "C:\Users\crenderos\Desktop\"

Después de esta línea:

ActiveWindow.SmallScroll Down:=-6

Tienes esta línea:

End Sub

Tienes que borrar esa línea que dice: " End Sub"


[Sal u dos

Ya realice esas correcciones pero no me funciona, quizás como lo estoy ejecutando, te adjunto una imgane en las capertas (cada uno contiene un libro llamada Enero 2018) en ese archivo en excel Book23 he guardado el código, abro el archivo y ahí ejecuto la macro y no me resulta.

Pero tienes que agregar la carpeta Funciona

ruta_inicial = "C:\Users\crenderos\Desktop\FUNCIONA\"

El archivo se debe llamar así:

arch_inicial = "Enero 18.xlsx"

Revisa la mayúscula y la extensión

Ya le agregue eso, la ejecuto pero me dio erro 400, y me abrió uno de los libros Enero 18, también escribió una parte de ese libro en el libro en blanco.

¿Te puedo enviar las carpetas con los archivos?

Por si me puedes ayudar a que se ejecute por favor

No puedo descargar archivos.

Envíame tus archivos y el archivo con la macro.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Carlos Renderos Rodriguez

Te lo acabo de enviar, Saludos

Te anexo la macro actualizada

Sub Ejecutar_Macro()
'Por Dante Amor
    Application.ScreenUpdating = False
    ruta_inicial = "C:\Users\crenderos\Desktop\FUNCIONA\"
    arch_inicial = "Enero 18.xlsx"
    '
    Set fso = CreateObject("scripting.filesystemobject")
    Set carpeta = fso.getfolder(ruta_inicial)
    For Each subcarpeta In carpeta.subfolders
        If Dir(subcarpeta & "\" & arch_inicial) <> "" Then
            Set l2 = Workbooks.Open(subcarpeta & "\" & arch_inicial)
            '
            'INICIA CÓDIGO
            '
            l2.Activate
            Set h2 = l2.Sheets(1)
            h2.Range("B:F").EntireColumn.Insert
            u = h2.Range("A" & Rows.Count).End(xlUp).Row
            h2.Range("B10:B" & u).Value = 1
            h2.Range("C10:C" & u).Value = 2018
            h2.Range("D10:D" & u).Formula = "=DATE(RC[-1],RC[-2],RC[-3])"
            h2.Range("D10:D" & u).Copy
            h2.Range("E10").PasteSpecial xlPasteValuesAndNumberFormats
            h2.Range("A9").Copy
            h2.Range("F10").PasteSpecial xlPasteValuesAndNumberFormats
            'Application.CutCopyMode = False
            h2.Range("F11:F" & u).Value = h2.Range("F10")
            'h2.Columns("F:F").Select
            'h2.Range("F7").Activate
            With h2.Columns("F:F")
                .VerticalAlignment = xlBottom
                .WrapText = False
                .Orientation = 0
                .AddIndent = False
                .IndentLevel = -1
                .ShrinkToFit = False
                .ReadingOrder = xlContext
            End With
            h2.Range("F8").FormulaR1C1 = "SUCURSAL"
            h2.Range("E8").FormulaR1C1 = "FECHA"
            h2.Range("B:D").EntireColumn.Delete
            h2.Rows("9:9").Delete Shift:=xlUp
            'guardar libro 2 y cerrar
            l2.Close True
        End If
    Next
    MsgBox "Fin"
End Sub

[sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas