Supongamos que tiene una carpeta en su disco duro que contiene treinta archivos de texto y desea importarlos todos a un libro de Excel. Desea que cada archivo de texto termine en su propia hoja de trabajo en el libro de trabajo, de modo que tendrá un total de treinta hojas de trabajo.

Una forma de hacer esto es agregar manualmente las hojas de trabajo deseadas y luego importar individualmente cada uno de los archivos de texto. Esto, como puede imaginar, se volvería tedioso rápidamente. Una solución mucho mejor es utilizar una macro para realizar la importación, como la siguiente.

Sub CombineTextFiles()

Dim FilesToOpen     Dim x As Integer     Dim wkbAll As Workbook     Dim wkbTemp As Workbook     Dim sDelimiter As String

On Error GoTo ErrHandler     Application.ScreenUpdating = False

sDelimiter = "|"



FilesToOpen = Application.GetOpenFilename _       (FileFilter:="Text Files (.txt), .txt", _       MultiSelect:=True, Title:="Text Files to Open")



If TypeName(FilesToOpen) = "Boolean" Then         MsgBox "No Files were selected"

GoTo ExitHandler     End If

x = 1     Set wkbTemp = Workbooks.Open(FileName:=FilesToOpen(x))

wkbTemp.Sheets(1).Copy     Set wkbAll = ActiveWorkbook     wkbTemp.Close (False)

wkbAll.Worksheets(x).Columns("A:A").TextToColumns _       Destination:=Range("A1"), DataType:=xlDelimited, _       TextQualifier:=xlDoubleQuote, _       ConsecutiveDelimiter:=False, _       Tab:=False, Semicolon:=False, _       Comma:=False, Space:=False, _       Other:=True, OtherChar:="|"

x = x + 1

While x <= UBound(FilesToOpen)

Set wkbTemp = Workbooks.Open(FileName:=FilesToOpen(x))

With wkbAll             wkbTemp.Sheets(1).Move After:=.Sheets(.Sheets.Count)

.Worksheets(x).Columns("A:A").TextToColumns _               Destination:=Range("A1"), DataType:=xlDelimited, _               TextQualifier:=xlDoubleQuote, _               ConsecutiveDelimiter:=False, _               Tab:=False, Semicolon:=False, _               Comma:=False, Space:=False, _               Other:=True, OtherChar:=sDelimiter         End With         x = x + 1     Wend

ExitHandler:

Application.ScreenUpdating = True     Set wkbAll = Nothing     Set wkbTemp = Nothing     Exit Sub

ErrHandler:

MsgBox Err.Description     Resume ExitHandler End Sub

Esta macro le permite seleccionar qué archivos desea importar y luego coloca los datos de esos archivos en hojas de trabajo separadas en el libro de trabajo. La macro asume que los datos que se están importando usan el carácter de barra vertical (|) como delimitador entre campos.

Si sabe que los archivos que se van a importar están siempre en la carpeta específica y que desea importar todos los archivos de esa carpeta, puede simplificar un poco la macro. El siguiente ejemplo asume que los archivos están en la carpeta c: \ temp \ load_excel, pero puede cambiar ese nombre de carpeta haciendo un simple cambio a la variable fpath en el código de la macro.

Sub LoadPipeDelimitedFiles()

Dim idx As Integer     Dim fpath As String     Dim fname As String

idx = 0     fpath = "c:\temp\load_excel\"

fname = Dir(fpath & "*.txt")

While (Len(fname) > 0)

idx = idx + 1         Sheets("Sheet" & idx).Select         With ActiveSheet.QueryTables.Add(Connection:="TEXT;" _           & fpath & fname, Destination:=Range("A1"))

.Name = "a" & idx             .FieldNames = True             .RowNumbers = False             .FillAdjacentFormulas = False             .PreserveFormatting = True             .RefreshOnFileOpen = False             .RefreshStyle = xlInsertDeleteCells             .SavePassword = False             .SaveData = True             .AdjustColumnWidth = True             .RefreshPeriod = 0             .TextFilePromptOnRefresh = False             .TextFilePlatform = 437             .TextFileStartRow = 1             .TextFileParseType = xlDelimited             .TextFileTextQualifier = xlTextQualifierDoubleQuote             .TextFileConsecutiveDelimiter = False             .TextFileTabDelimiter = False             .TextFileSemicolonDelimiter = False             .TextFileCommaDelimiter = False             .TextFileSpaceDelimiter = False             .TextFileOtherDelimiter = "|"

.TextFileColumnDataTypes = Array(1, 1, 1)

.TextFileTrailingMinusNumbers = True             .Refresh BackgroundQuery:=False             fname = Dir         End With     Wend End Sub

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (3148) se aplica a Microsoft Excel 97, 2000, 2002 y 2003. Puede encontrar una versión de este consejo para la interfaz de cinta de Excel (Excel 2007 y posterior) aquí:

link: / excelribbon-Importing_Multiple_Files_to_a_Single_Workbook [Importación de varios archivos a un solo libro de trabajo].