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

1 respuesta

Respuesta
1

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.

¿Pero para qué quieres seleccionar el archivo que tiene la macro?

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.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas