Anidar varios acrhivos excel en uno nuevo con VBA - Macros

Me gustaría que me ayuden con un tema, tengo una carpeta en mi escritorio donde coloco varios archivos excel con varias hojas cada uno Me gustaría que se cree un libro nuevo automático y que se llame Anidación que contenga cada hoja de cada libro presente en la carpeta, alguna ayuda de como anidarlo

1 respuesta

Respuesta
3

¿Estas seguro que quieres hacer eso? Suena como un proceso tedioso para Excel.

Y cuando dices "Me gustaría que se cree un libro nuevo automático" te refieres a tener un tercer libro donde reside una macro que se encarga de crear dicho libro (libro a parte). ¿Y ese procedimiento cuantas veces se hará? ¿Cuántos "libro nuevo automático" se crearan? ¿Se sobre escribe el anterior?

Explica bien lo que estas tramando buajajaja.

Ante todo gracias por recepcionar mi pregunta.

Deseo tener un libro que solo contenga la macro que realiza este procedimirnto

Al ejecutar la macro en este libro este vaya a la ruta de mi carpeta donde tenga mis archivos y que anide cada una de las hojas en un libro nuevo con el nombre "Anidado".

Digamos que tenga 3 libros en mi carpeta al ejecutar mi macro busque esos archivos excel y luego abra uno a uno y los mueva a un libro nuevo que al finalizar se llame "anidado" o seria una buena ayuda si me abriera un FileDialog para que me guarde esa ruta y una todos los libros de la ruta que elija alguna duda con gusto lo guiare.

Muchísimas gracias

Bueno siempre y cuando cada libro tenga nombres de hojas diferentes, osea que no se repitan, no hay problema. Y en caso de que alguna hoja tenga el mismo nombre, ¿qué deseas hacer? ¿O de plano estas seguro que eso nunca ocurrirá?

Por lo general cuando lo hago manual y pongo copiar hoja a otro libro y si hay hojas iguales este lo copia normal pero agrega un numero de cuantas veces se repitió

Digamos si anida la hoja de nombre "Macros" y ya esta en mi libro se guarde como Macros (1) si ya esta ese que guarde Macros (2) y así sucesivamente si ya esta la idea es que anide todas las hojas de los libros amigo.

Ok, aquí tienes, prueba esto:

Sub MultiSelector()
Dim VentanaElegir As FileDialog
Dim newBookName As String: newBookName = ThisWorkbook.Path & "\Archivos Excel\Aninado.xlsx"
Dim newBook As Workbook
Set VentanaElegir = Application.FileDialog(msoFileDialogFilePicker)
Dim vrtSelectedItem As Variant
With VentanaElegir
    .Title = "Seleccione los archivos Excel"
    .Filters.Add "Archivos Excel", "*.xls; *.xlsx; *.xlsm", 1
    .InitialFileName = ThisWorkbook.Path & "\Archivos Excel\"
    .AllowMultiSelect = True
    If .Show = -1 Then
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        .DisplayAlerts = False
        .DisplayStatusBar = False
        .Calculation = xlCalculationManual
    End With
    Set newBook = Workbooks.Add
        For Each vrtSelectedItem In .SelectedItems
            Call CrearAnidado(vrtSelectedItem, newBook)
        Next
    newBook.Sheets(1).Delete
    newBook.SaveAs newBookName, FileFormat:=51
    newBook.Close
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .DisplayAlerts = True
        .DisplayStatusBar = True
        .Calculation = xlCalculationAutomatic
    End With
    Else
        'Aquí no va nada, dejalo así, esto determina si se dio
 'click en cancelar y no se selecciono ningún archivo
 'osea si se interrumpió el proceso que no suceda nada
    End If
End With
Set VentanaElegir = Nothing
End Sub
Sub CrearAnidado(fPath As Variant, LibroAnidado As Workbook)
Dim shts As Worksheet
Dim LibroOrigen As Workbook
Set LibroOrigen = Workbooks.Open(fPath)
For Each shts In LibroOrigen.Worksheets
    shts.Copy After:=LibroAnidado.Worksheets(LibroAnidado.Sheets.Count)
Next shts
LibroOrigen.Close SaveChanges:=True
End Sub

Son dos macros, solo se ejecuta una, la que se llama "MultiSelector" la otra macro es llamada por esa automáticamente, es la que se encarga de hacer el movimiento de las hojas al nuevo libro.

Como no conozco la estructura de tus carpetas, hice la mía así:

El libro de la macro esta en una carpeta cualquiera (no importa el nombre) pero junto con el hay otra carpeta que se llama "Archivos Excel" y dentro de ella están los archivos de donde se van a copiar las hojas.

Te dejo un video de como funciona: Video demo

Andy

¡Gracias! Amigo una duda cuando le cambio la extensión

"\Archivos Excel\Aninado.xlsx"

por 

"\Archivos Excel\Aninado.xlsm"

me arroga un error en esta fila

newBook.SaveAs newBookName, FileFormat:=51

alguna ayuda amigo en esto

Ah claro porque el FileFormat es diferente para cada extensión. Para xlsm es 52

Te dejo una lista

50 = .xlsb (esto es binario, casi no se usa aunque es super útil)

51 = .xlsx

52 = .xlsm

53 = esto es xlsm para Mac

56 = .xls

57 = esto es xls para Mac

De nuevo muchísimas gracias por esta información. Genial

De nada :)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas