VBA combina varios archivos de Excel en un libro de trabajo

Este tutorial le mostrará cómo combinar varios archivos de Excel en un libro de trabajo en VBA

La creación de un solo libro de trabajo a partir de varios libros de trabajo utilizando VBA requiere que se sigan una serie de pasos.

  • Debe seleccionar los libros de trabajo de los que desea obtener los datos de origen: los archivos de origen.
  • Debe seleccionar o crear el libro de trabajo en el que desea colocar los datos: el archivo de destino.
  • Debe seleccionar las hojas de los archivos de origen que necesite.
  • Debe indicarle al código dónde colocar los datos en el archivo de destino.

Combinar todas las hojas de todos los libros abiertos en un nuevo libro como hojas individuales

En el siguiente código, los archivos de los que necesita copiar la información deben estar abiertos, ya que Excel recorrerá los archivos abiertos y copiará la información en un nuevo libro de trabajo. El código se coloca en el Libro de macros personal.

Estos archivos son los ÚNICOS archivos de Excel que deben estar abiertos.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 Sub CombineMultipleFiles ()En caso de error, vaya a eh'declarar variables para contener los objetos requeridosDim wbDestination As WorkbookDim wbSource como libro de trabajoDim wsSource como hoja de trabajoDim wb como libro de trabajoDim sh como hoja de trabajoDim strSheetName como cadenaDim strDestName como cadena'apaga la actualización de la pantalla para acelerar las cosasApplication.ScreenUpdating = Falso'primero cree un nuevo libro de trabajo de destinoEstablecer wbDestination = Workbooks.Add'obtenga el nombre del nuevo libro de trabajo para que lo excluya del ciclo siguientestrDestName = wbDestination.Name'ahora recorre cada uno de los libros de trabajo abiertos para obtener los datos, pero excluye su nuevo libro o el libro de macro personalPara cada wb en la aplicación.Si wb.Name strDestName y wb.Name "PERSONAL.XLSB" EntoncesEstablecer wbSource = wbPara cada sh en wbSource.Worksheetssh.Copy After: = Workbooks (strDestName) .Sheets (1)Siguiente shTerminara siSiguiente wb'ahora cierre todos los archivos abiertos excepto el nuevo archivo y el libro de macros personal.Para cada wb en la aplicación.Si wb.Name strDestName y wb.Name "PERSONAL.XLSB" Entonceswb.Cerrar FalsoTerminara siSiguiente wb'eliminar la hoja uno del libro de destinoApplication.DisplayAlerts = FalseHojas de cálculo ("Hoja1"). EliminarApplication.DisplayAlerts = True'limpia los objetos para liberar la memoriaEstablecer wbDestination = NadaEstablecer wbSource = NadaEstablecer wsSource = NadaEstablecer wb = Nada'enciende la actualización de la pantalla cuando se completaApplication.ScreenUpdating = FalsoSalir de Subeh:MsgBox Err. DescripciónEnd Sub

Haga clic en el cuadro de diálogo Macro para ejecutar el procedimiento desde su pantalla de Excel.

Ahora se mostrará su archivo combinado.

Este código recorrió cada archivo y copió la hoja en un archivo nuevo. Si alguno de sus archivos tiene más de una hoja, también los copiará, ¡incluidas las hojas sin nada en ellos!

Combinar todas las hojas de todos los libros abiertos en una sola hoja de trabajo en un libro nuevo

El siguiente procedimiento combina la información de todas las hojas en todos los libros abiertos en una sola hoja de trabajo en un nuevo libro que se crea.

La información de cada hoja se pega en la hoja de destino en la última fila ocupada de la hoja de trabajo.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 Sub CombineMultipleSheets ()En caso de error, vaya a eh'declarar variables para contener los objetos requeridosDim wbDestination As WorkbookDim wbSource como libro de trabajoDim wsDestination As WorksheetDim wb como libro de trabajoDim sh como hoja de trabajoDim strSheetName como cadenaDim strDestName como cadenaDim iRws como enteroDim iCols como enteroDim totRws como enteroDim strEndRng como cadenaDim rngSource como rango'apaga la actualización de la pantalla para acelerar las cosasApplication.ScreenUpdating = Falso'primero cree un nuevo libro de trabajo de destinoEstablecer wbDestination = Workbooks.Add'obtenga el nombre del nuevo libro de trabajo para que lo excluya del ciclo siguientestrDestName = wbDestination.Name'ahora recorre cada uno de los libros abiertos para obtener los datosPara cada wb en la aplicación.Si wb.Name strDestName y wb.Name "PERSONAL.XLSB" EntoncesEstablecer wbSource = wbPara cada sh en wbSource.Worksheets'obtener el número de filas y columnas en la hojash.ActivarActiveSheet.Cells.SpecialCells (xlCellTypeLastCell) .ActivateiRws = ActiveCell.RowiCols = ActiveCell.Column'establece el rango de la última celda de la hojastrEndRng = sh.Cells (iRws, iCols) .Address'establecer el rango de fuente para copiarEstablecer rngSource = sh.Range ("A1:" & strEndRng)'encuentra la última fila en la hoja de destinowbDestination.ActivateEstablecer wsDestination = ActiveSheetwsDestination.Cells.SpecialCells (xlCellTypeLastCell) .SelecttotRws = ActiveCell.Row'comprobar si hay suficientes filas para pegar los datosSi totRws + rngSource.Rows.Count> wsDestination.Rows.Count EntoncesMsgBox "No hay suficientes filas para colocar los datos en la hoja de cálculo de consolidación".Ir a ehTerminara si'agregue una fila para pegar en la siguiente fila hacia abajoSi totRws 1 entonces totRws = totRws + 1rngSource.Copy Destino: = wsDestination.Range ("A" & totRws)Siguiente shTerminara siSiguiente wb'ahora cierra todos los archivos abiertos excepto el que quierasPara cada wb en la aplicación.Si wb.Name strDestName y wb.Name "PERSONAL.XLSB" Entonceswb.Cerrar FalsoTerminara siSiguiente wb'limpia los objetos para liberar la memoriaEstablecer wbDestination = NadaEstablecer wbSource = NadaEstablecer wsDestination = NadaEstablecer rngSource = NothingEstablecer wb = Nada'enciende la actualización de la pantalla cuando se completaApplication.ScreenUpdating = FalsoSalir de Subeh:MsgBox Err. DescripciónEnd Sub

Combinar todas las hojas de todos los libros abiertos en una sola hoja de trabajo en un libro activo

Si desea llevar la información de todos los demás libros de trabajo abiertos al que está trabajando actualmente, puede usar este código a continuación.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 Sub CombineMultipleSheetsToExisting ()En caso de error, vaya a eh'declarar variables para contener los objetos requeridosDim wbDestination As WorkbookDim wbSource como libro de trabajoDim wsDestination As WorksheetDim wb como libro de trabajoDim sh como hoja de trabajoDim strSheetName como cadenaDim strDestName como cadenaDim iRws como enteroDim iCols como enteroDim totRws como enteroDim rngEnd como cadenaDim rngSource como rango'establecer el objeto de libro activo para el libro de destinoEstablecer wbDestination = ActiveWorkbook'obtener el nombre del archivo activostrDestName = wbDestination.Name'apaga la actualización de la pantalla para acelerar las cosasApplication.ScreenUpdating = Falso'primero cree una nueva hoja de trabajo de destino en su libro de trabajo activoApplication.DisplayAlerts = Falso'reanudar el siguiente error en caso de que la hoja no existaEn caso de error, reanudar siguienteActiveWorkbook.Sheets ("Consolidación"). Eliminar'restablecer trampa de error para ir a la trampa de error al finalEn caso de error, vaya a ehApplication.DisplayAlerts = True'agregar una nueva hoja al libro de trabajoCon ActiveWorkbookEstablecer wsDestination = .Sheets.Add (Después: =. Sheets (.Sheets.Count))wsDestination.Name = "Consolidación"Terminar con'ahora recorre cada uno de los libros abiertos para obtener los datosPara cada wb en la aplicación.Si wb.Name strDestName y wb.Name "PERSONAL.XLSB" EntoncesEstablecer wbSource = wbPara cada sh en wbSource.Worksheets'obtén el número de filas en la hojash.ActivarActiveSheet.Cells.SpecialCells (xlCellTypeLastCell) .ActivateiRws = ActiveCell.RowiCols = ActiveCell.ColumnrngEnd = sh.Cells (iRws, iCols) .AddressEstablecer rngSource = sh.Range ("A1:" & rngEnd)'encuentra la última fila en la hoja de destinowbDestination.ActivateEstablecer wsDestination = ActiveSheetwsDestination.Cells.SpecialCells (xlCellTypeLastCell) .SelecttotRws = ActiveCell.Row'comprobar si hay suficientes filas para pegar los datosSi totRws + rngSource.Rows.Count> wsDestination.Rows.Count EntoncesMsgBox "No hay suficientes filas para colocar los datos en la hoja de cálculo de consolidación".Ir a ehTerminara si'agregue una fila para pegar en la siguiente fila hacia abajo si no está en la fila 1Si totRws 1 entonces totRws = totRws + 1rngSource.Copy Destino: = wsDestination.Range ("A" & totRws)Siguiente shTerminara siSiguiente wb'ahora cierra todos los archivos abiertos excepto el que quierasPara cada wb en la aplicación.Si wb.Name strDestName y wb.Name "PERSONAL.XLSB" Entonceswb.Cerrar FalsoTerminara siSiguiente wb'limpia los objetos para liberar la memoriaEstablecer wbDestination = NadaEstablecer wbSource = NadaEstablecer wsDestination = NadaEstablecer rngSource = NothingEstablecer wb = Nada'enciende la actualización de la pantalla cuando se completaApplication.ScreenUpdating = FalsoSalir de Subeh:MsgBox Err. DescripciónEnd Sub

Va a ayudar al desarrollo del sitio, compartir la página con sus amigos

wave wave wave wave wave