Problema al juntar archivos excel

Hola, buenos días y muchas gracias de antemano.
Mi problema es el siguiente, tengo en una carpeta una serie de archivos excel. Solo tienen ocupada la columna A. Y lo que quiero es juntarlos todos en una hoja y que en la columna B me aparezca de que hoja viene. Encontré una macro y la modifique un poco para que hiciese lo que yo quiero, pero por ahora solo me coge la primera fila de cada archivo, y yo necesito que me coja todas las filas de cada archivo. Esta es mi macro:
Sub CopySheet()
Dim basebook As Workbook
Dim mybook As Workbook
Dim i As Long
Application.ScreenUpdating = False ' Esto para que no muestre lo que hace la macro
With Application.FileSearch
.NewSearch
.LookIn = "C:\Documents and Settings\libros excel" ' Aqui esta la carpeta donde estan los libros
.SearchSubFolders = False
.FileType = msoFileTypeExcelWorkbooks
If .Execute() > 0 Then
Set basebook = ThisWorkbook
For i = 2 To .FoundFiles.Count
Set mybook = Workbooks.Open(.FoundFiles(i))
  basebook.Sheets(1).Range("B" & i) = ActiveSheet.Parent.Name
  basebook.Sheets(1).Range("A" & i) = mybook.Worksheets(1).Range("A1")
mybook.Close
Next i
End If
End With
Application.ScreenUpdating = True
End Sub
He intentado cambiar los rangos de ("B" & i), pero me da error al utilizar variables que me cree y no se como puedo hacer para que me coja todas las filas de cada hoja excel.
Muchas gracias si alguien sabe como ayudarme!
Un saludo.

1 Respuesta

Respuesta
1
Te explico la parte de la copia. Necesitas utilizar otras variables porque i es el contador de libros encontrados.
Entonces:
For i = 2 To .FoundFiles.Count
Set mybook = Workbooks.Open(.FoundFiles(i))
'en B2 estás colocando el nombre del libro abierto que pasa a ser el activo
  basebook.Sheets(1).Range("B" & i) = ActiveSheet.Parent.Name
'y en A2 estás colocando el contenido de A1 del libro abierto
  basebook.Sheets(1).Range("A" & i) = mybook.Worksheets(1).Range("A1")
mybook.Close
Next i
Por lo tanto, confirma estos detalles para que te pase las instrucciones correctas:
-Dónde se colocará el nombre del libro abierto
-Si solo se copiará el contenido de col A o habrá + col por cada libro
- Si el siguiente libro debe ser copiado a continuación del libro anterior o en hoja distinta.
Nota: Acabo de publicar mis 1ras GUÍAS TEMÁTICAS, una de ellas trata justamente el tema: Mover-Copiar datos... no te la pierdas !
Y por ahora solo se copia la col A a partir de A1, confirma si esto es así y si solo vas a copiar la col A del libro abierto
-El nombre del libro abierto quiero tenerlo en la columna B.
-Solo quiero que me copie el contenido de la columna A de cada libro, en el que cada libro SOLO tiene 1 hoja.
-El siguiente libro tiene que ser copiado a continuación, en la misma hoja.
De tal modo que aparezca algo así:
                                    A B
"primera linea de la columna A de la hoja1 del libro 1" "libro1"
"segunda linea de la columna A de la hoja1 del libro 1" "libro1"
"tercera linea de la columna A de la hoja1 del libro 1" "libro1"
"primera linea de la columna A de la hoja1 del libro 2" "libro2"
"segunda linea de la columna A de la hoja1 del libro 2" "libro2"
                            ... ...
Muchas gracias!
Un saludo
Pruébalo con este bucle For, utilicé 3 variables nuevas: j, Z y filafin (quizás necesites declararlas)
Set basebook = ThisWorkbook
For i = 2 To .FoundFiles.Count
    'establezco la primer fila libre para pegar
    j = ActiveSheet.Range("B65536").End(xlUp).Row + 1
    Set mybook = Workbooks.Open(.FoundFiles(i))
    'establezco en qué fila termina el rango de datos en libro abierto y lo copio
    filafin = ActiveSheet.Range("A65536").End(xlUp).Row
    mybook.Worksheets(1).Range("A1:A" & filafin).Copy Destination:=basebook.Sheets(1).Range("A" & j)
    'establezco hasta qué fila llegó lo copiado en A para completar B
    Z = basebook.Sheets(1).Range("A65536").End(xlUp).Row
    basebook.Sheets(1).Range("B" & j & ":B" & Z) = ActiveSheet.Parent.Name
    mybook.Close
Next i
End If
End With
Application.ScreenUpdating = True
End Sub
Pruébala y si algo falla, escribime cómo te quedó la rutina completa ...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas