.01/11/16
Buenas noches, Luis
A continuación te paso una rutina que deberías agregar a tu archivo que funciona como receptor de las hojas de los archivos que, idealmente, tendrás en una carpeta.
En ese archivo operativo, accede al Editor de VBA (Atajo: Alt + F11), inserta un módulo (Insertar -Módulo) y pega el siguiente código:
Sub Consolid()
'---- Variables modificables ----
'=== LUIS, modificá estos datos de acuerdo a tu proyecto:
DirBusc = "C:\CarpetaDeArchivos" 'carpeta donde están los archivos
Extension = "xlsx" 'Extensión de los archivos a consolidar. Dejar "*" para que sean todos
TraerHoja = "Resultado" 'Hoja de donde tomar los datos de cada archivo
JuntarEn = "consolidado" 'Hoja de destino.
Limpiar = "SI" ' SI para vacíar la hoja consolidado o NO para que agregue a lo existente.
'---- fin Variables
'
'---- inicio de rutina:
'
Sheets(JuntarEn).Select
If Limpiar = "SI" Then Cells.Clear
DirBusc = DirBusc & IIf(Right(DirBusc, 1) = "\", "", "\")
Set ArchConsol = ActiveWorkbook
LosArchivos = Dir(DirBusc & "*." & Extension)
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Do While LosArchivos <> ""
Application.StatusBar = ">>>>>>>>>>>>>> Un momento, egragando hoja de archivo " & Left(LosArchivos, InStr(1, LosArchivos, Extension) - 2)
Donde = Application.WorksheetFunction.CountA(ArchConsol.Sheets(JuntarEn).Cells)
Donde = IIf(Donde > 0, Cells(Sheets(JuntarEn).UsedRange.Row + Sheets(JuntarEn).UsedRange.Rows.Count + 1, Sheets(JuntarEn).UsedRange.Column).Address, "A1")
Workbooks.Open DirBusc & LosArchivos, xlNo
Sheets(TraerHoja).Visible = True
Sheets(TraerHoja).UsedRange.Copy
ArchConsol.Sheets(JuntarEn).Range(Donde).PasteSpecial Paste:=xlPasteValues
ArchConsol.Sheets(JuntarEn).Range(Donde).PasteSpecial Paste:=xlPasteFormats
Workbooks(LosArchivos).Close xlNo
cont = cont + 1
LosArchivos = Dir
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
ElMensaje = IIf(cont = 0, "NO SE AGREGO DATOS DE NINGUN ARCHIVO", "Se agregaron DATOS de : " & cont & " archivo" & IIf(cont > 1, "s", ""))
TipoMens = IIf(cont = 0, vbCritical, vbInformation)
ElTitulo = IIf(cont = 0, "NO SE HIZO NADA", "TERMINADO!")
Application.ScreenUpdating = True
MsgBox ElMensaje, TipoMens, ElTitulo
Set ArchConsol = Nothing
Application.StatusBar = False
End Sub
Nota que al principio del código le podrás indicar de qué carpeta leer los archivos y cual es la extensión que deseas considerar. Si quisieras que traiga todos los archivos de MS Excel, reemplazala la variable "xlsx" por "xls*"
También están indicadas la hoja de destino y la de origen de cada archivo (no iporta si estuviere oculta o no).
A falta de aclaración dejé una última variable que si dejas en SI, borrará todo lo que tiene la hoja de consolidación para empezar de nuevo. Si colocas NO, dejará los datos que tuviese al ejecutar la rutina.
El procedimiento se encarga de agregar a la hoja consolidación el contenido de la hoja Resultado de cada archivo que abra -como valores y con el formato original- y cierra el que abrió, sin cambios, para pasar al siguiente.
Pruebalo con tu caso real y coméntame si es lo que buscabas o si necesitas más apoyo con esto.
Un abrazo
Fernando
(Buenos Aires, Argentina)
.