Supponiamo che tu abbia una cartella sul tuo disco rigido che contiene trenta file di testo e desideri importarli tutti in una cartella di lavoro di Excel. Si desidera che ogni file di testo finisca sul proprio foglio di lavoro nella cartella di lavoro, in modo da avere un totale di trenta fogli di lavoro.

Un modo per farlo è aggiungere manualmente i fogli di lavoro desiderati e quindi importare singolarmente ciascuno dei file di testo. Questo, come puoi immaginare, diventerebbe presto noioso. Una soluzione molto migliore è usare una macro per eseguire l’importazione, come quella seguente.

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

Questa macro consente di selezionare i file che si desidera importare e quindi inserisce i dati da quei file su fogli di lavoro separati nella cartella di lavoro. La macro presuppone che i dati importati utilizzino il carattere barra verticale (|) come delimitatore tra i campi.

Se sai che i file da importare si trovano sempre nella cartella specifica e che vuoi importare tutti i file in quella cartella, puoi semplificare un po ‘la macro. L’esempio seguente presuppone che i file si trovino nella cartella c: \ temp \ load_excel, ma è possibile modificare il nome della cartella apportando una semplice modifica alla variabile fpath nel codice della 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: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (3148) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: