Importere flere filer til en enkelt arbeidsbok

July 4  by Eliza

La oss si at du har en mappe på harddisken som inneholder tretti tekstfiler, og du vil importere alle av dem til en Excel-arbeidsbok. Du vil hver tekstfil å ende opp på sin egen regneark i arbeidsboken, slik at du vil ha et totalt tretti regneark.

En måte å gjøre dette på er å legge til de ønskede regneark manuelt, og deretter individuelt importere hver av tekstfiler. Dette, som du kan forestille deg, ville raskt bli langtekkelig. En mye bedre løsning er å bruke en makro til å gjøre import, slik som den neste.

Sub CombineTextFiles ()
Dim FilesToOpen
Dim x As Integer
Dim wkbAll Som arbeidsbok
Dim wkbTemp Som arbeidsbok
Dim sDelimiter As String

On Error GoTo ErrHandler
Application.ScreenUpdating = False

sDelimiter = "|"

FilesToOpen = Application.GetOpenFilename _
(Filefilter: = "tekstfiler (* .txt), * .txt", _
Multiselect: = True, Tittel: = "tekstfiler til Open")

Hvis Typename (FilesToOpen) = "boolsk" Da
MsgBox "Ingen filer ble valgt"
GoTo ExitHandler
End If

x = 1
Satt wkbTemp = Workbooks.Open (Filename: = FilesToOpen (x))
wkbTemp.Sheets (1) .Copy
Satt wkbAll = Active
wkbTemp.Close (usann)
wkbAll.Worksheets (x) .Columns ("A: A"). TextToColumns _
Destinasjon: = Range ("A1"), datatype: = xlDelimited, _
TextQualifier: = xlDoubleQuote, _
ConsecutiveDelimiter: = False, _
Tab: = False, Semicolon: = False, _
Komma: = False, Space: = False, _
Annet: = True, OtherChar: = "|"
x = x + 1

Mens x <= UBound (FilesToOpen)
Satt wkbTemp = Workbooks.Open (Filename: = FilesToOpen (x))
Med wkbAll
wkbTemp.Sheets (1) .Kjør Etter: = Sheets (.Sheets.Count).
.Worksheets (X) .Columns ("A: A"). TextToColumns _
Destinasjon: = Range ("A1"), datatype: = xlDelimited, _
TextQualifier: = xlDoubleQuote, _
ConsecutiveDelimiter: = False, _
Tab: = False, Semicolon: = False, _
Komma: = False, Space: = False, _
Annet: = sant, OtherChar: = sDelimiter
Avslutt med
x = x + 1
Wend

ExitHandler:
Application.ScreenUpdating = True
Satt wkbAll = Nothing
Satt wkbTemp = Nothing
Exit Sub

ErrHandler:
MsgBox Err.Description
Gjenoppta ExitHandler
End Sub

Denne makroen lar deg velge hvilke filer du vil importere, og deretter det plasserer dataene fra disse filene på de separate regneark i arbeidsboken. Makroen antar at dataene blir importert bruker røret karakter (|) som skilletegn mellom feltene.

Hvis du vet at filene som skal importeres er alltid i bestemt mappe, og at du vil importere alle filene i denne mappen, så kan du forenkle makro litt. Følgende eksempel forutsetter at filene er i mappen c: \ temp \ load_excel, men du kan endre den mappen navn ved å gjøre en enkel endring å fpath variable i makrokoden.

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")
Mens (Len (fname)> 0)
idx = idx + 1
Sheets ("skjema" & idx) .Velg
Med ActiveSheet.QueryTables.Add (Connection: = "TEKST;" _
& 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
Avslutt med
Wend
End Sub

ExcelTips er din kilde for kostnadseffektiv Microsoft Excel trening. Dette tipset (3148) gjelder for Microsoft Excel 97, 2000, 2002, og 2003. Du kan finne en versjon av dette tipset for Båndet av Excel (Excel 2007 og senere) her: Importere flere filer til en enkelt arbeidsbok.