Procesar libros excelconmacros distintas para Dante
Hola, yo trabajo con autocad y tenemos varios programas para procesar archivos de autocad y aplicarles rutinas .lsp o .scr estén en la carpeta que estén. No tengo un ejemplo real. Pero imaginate que tengo 4 libros excel situados en distintas carpetas y a los cuatro tienen que tener la columna D de ancho 30
( Por usar la ultima macro que me has hecho ) en vez de colocar el archivo excel con la macro en cada carpeta, que se puedan seleccionar los archivos que necesite y aplicar la macro ha dichos archivos, estén donde estén. No se si abra un software, macro,... Que haga esto.
Saludos y gracias
Puede ser así:
Que la macro te abra un explorador, entonces tu puedes seleccionar uno o varios archivos, cuando presiones Aceptar, entonces la macro le aplicará lo de la columna a todos los libros y a todas las hojas. Pero aquí hay que considerar que si tienes 3 carpetas tienes que ejecutar 3 veces la macro, en cada ejecución seleccionar la carpeta y después seleccionar los archivos.
¿Eso es lo que quieres?
Hola dante si algo así es lo que busco, pero que te he dicho 3 carpetas como si te digo 20 "si tienes 3 carpetas tienes que ejecutar 3 veces la macro, en cada ejecución seleccionar la carpeta y después seleccionar"
Si este paso que indicas no crees que se pueda optimizar pues tendrá que ser así,
¿Y por lo que cuentas no conoces ningún programa que haga esto?
Saludos
El programa tendría que hacerlo yo.
Puedo hacer un programa que busque en toda tu PC todos los archivos de excel, los abra, vaya a todas las hojas y a la columna "D" la cambie a 30. Pero supongo que no quieres que abra todos los archivos de tu PC.
Debes ser más claro, suponiendo que tienes 20 carpetas o 100, el número no importa, tienes que decirle a la macro cuál carpeta o cuáles carpetas. La macro no puede adivinar cuáles carpetas quieres, ¿verdad?
Entonces podrías poner el nombre de las carpetas en una lista de excel. Por ejemplo:
Ahora sí, ya le estás indicando a la macro cuáles carpetas. En la lista puedes poner 4, 20, 100, 23000 carpetas, no importa cuántas carpetas pongas, la macro va a abrir todos los archivos de excel de cada carpeta de la lista y a cada hoja les va a cambiar el ancho de la columna "D" a 30.
Pon en un archivo la lista de tus carpetas, tal y como lo puse en la imagen, en ese mismo archivo pon la siguiente macro, no importa en dónde guardes el archivo con la macro.
Sub AjustaColumnaCarpetas() 'Por.Dante Amor ' Application.ScreenUpdating = False Set l1 = ThisWorkbook nombre = l1.Name For i = 2 To Range("A" & Rows.Count).End(xlUp).Row ChDir Cells(i, "A") archi = Dir("*.xls*") Do While archi <> "" If archi <> l1.Name Then Set l2 = Workbooks.Open(archi) For Each h In l2.Sheets h.Columns("D:D").ColumnWidth = 30 Next l2.Save l2.Close End If archi = Dir() Loop Next MsgBox "Se ajustaron las columnas 'D' de todas las hojas de todos los libros" End Sub
Saludos.Dante Amor
No olvides valorar la respuesta.
Hola dante, funciona esto ultimo que has hecho, no seria más fácil seleccionar en una especie de explorador la carpeta que deseamos y aplicar la macro, sin tener ni idea de programación, si es demasiado complicado olvidalo, como te he dicho antes esto funciona perfectamente.
¿Quieres qué se abra la ventana del explorador?
Utiliza esta macro.
Sub AjustaColumnaCarpetas() 'Por.Dante Amor ' Application.ScreenUpdating = False Set l1 = ThisWorkbook nombre = l1.Name ' ruta = ThisWorkbook.Path Set fldr = Application.FileDialog(msoFileDialogFolderPicker) With fldr .Title = "Selecciona una carpeta" .AllowMultiSelect = False .InitialFileName = ruta If .Show <> -1 Then Exit Sub cp = .SelectedItems(1) End With ' ChDir cp archi = Dir("*.xls*") Do While archi <> "" If archi <> l1.Name Then Set l2 = Workbooks.Open(archi) For Each h In l2.Sheets h.Columns("D:D").ColumnWidth = 30 Next l2.Save l2.Close End If archi = Dir() Loop MsgBox "Se ajustaron las columnas 'D' de todas las hojas de todos los libros" End Sub
La macro abrirá todos los excel de la carpeta que elijas.
Saludos. Dante Amor
Recuerda valorar la respuesta.
Hola dante también funciona, poder elegir la carpeta donde están los archivos excel
Con el explorador esta muy bien, se podría hacer lo mismo con la macro,
Ahora la macro que se ejecuta esta incluida en la selección de la carpeta podría ser en dos pasos. Primero que se abra el explorador y seleccionamos la carpeta donde están los excel. Segundo con el explorador seleccionamos la macro que queremos ejecutar en los archivos. Tercero ejecutamos dicha macro.
Espero haberme explicado bien
Saludos y mil gracias
El primer paso me queda claro, se ejecuta la macro y te abre un explorador para que selecciones una carpeta.
El paso 2, no lo entiendo, ¿cómo qué con el explorador seleccionas la macro que quieres ejecutar?
¿El tercero?, la macro ya está en ejecución desde el paso 1, tampoco entiendo esta parte.
La macro del primer paso solo seria para seleccionar la carpeta donde están los archivos excel.
El paso 2 seria seleccionar desde el explorador el archivo donde esta la macro que queremos aplicar a la carpeta seleccionada y que se ejecute
Quito el paso 3. pero ya se que sale un paso más que en tu planteamiento pero no se como hacerlo para que los compañeros no se líen con el proceso.
Sigo sin entender qué quieres hacer en el paso2.
¿Qué quieres hacer al seleccionar el archivo que tiene la macro?
¿Probaste la última macro que te puse?
si probe la ultima macro que pusiste y como te dije funciona perfectamente.
en el paso 2 con el explorador de windows seleccionar el archivo que tiene la macro, y que se ejecute en la carpeta con los archivos excel seleccionada en el paso 1.
si me estoy explicando mal pierdas el tiempo en esto.
Con esta macro que te puse, puedes seleccionar una carpeta, y lo que hará la macro es procesar todo los archivos que estén dentro de la carpeta seleccionada.
Sub AjustaColumnaCarpetas() 'Por.Dante Amor ' Application.ScreenUpdating = False Set l1 = ThisWorkbook nombre = l1.Name ' ruta = ThisWorkbook.Path Set fldr = Application.FileDialog(msoFileDialogFolderPicker) With fldr .Title = "Selecciona una carpeta" .AllowMultiSelect = False .InitialFileName = ruta If .Show <> -1 Then Exit Sub cp = .SelectedItems(1) End With ' ChDir cp archi = Dir("*.xls*") Do While archi <> "" If archi <> l1.Name Then Set l2 = Workbooks.Open(archi) For Each h In l2.Sheets h.Columns("D:D").ColumnWidth = 30 Next l2.Save l2.Close End If archi = Dir() Loop MsgBox "Se ajustaron las columnas 'D' de todas las hojas de todos los libros" End Sub
Y no importa en dónde pongas el archivo con la macro, al momento en que la ejecutes puedes seleccionar cualquier otra carpeta.
- Compartir respuesta