¿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

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

https://www.dropbox.com/sh/qxsrl1900vtsfab/AAD9kHN3JsPGhXfMezKoloFWa?dl=0
En ese link las puedes descargar,

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 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
- Compartir respuesta
