2012-04-09 2 views
0

Excel 2010에서는 폴더의 모든 텍스트 파일 데이터를 하나의 워크 시트로로드하려고합니다.모든 텍스트 파일을 하나의 워크 시트에로드 하시겠습니까?

각 시트에는 텍스트 파일 하나의 데이터가 있어야합니다.

각 시트는 첫 번째 행의 헤더로 구분 된 파이프입니다.

업데이트 매크로

Sub LoadTextFilesLoop() 
    Dim objFSO As Object 
    Dim objFolder As Object 
    Dim objFile As Object 
    Dim ws As Worksheet 

    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    'Get the folder object associated with the directory 
    Set objFolder = objFSO.GetFolder("C:\Export\") 
    'Loop through the Files collection 
    For Each objFile In objFolder.Files 
    NewFileImport (objFile.Name) 
    Next 
    'Clean up! 
    Set objFolder = Nothing 
    Set objFile = Nothing 
    Set objFSO = Nothing 
End Sub 

Sub NewFileImport(FileName) 
    Sheets.Add After:=Sheets(Sheets.Count) 
    With ActiveSheet.QueryTables.Add(Connection:= _ 
     "TEXT;C:\Export\FileName", _ 
     Destination:=Range("$A$1")) 
     .Name = FileName 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .TextFilePromptOnRefresh = False 
     .TextFilePlatform = 65001 
     .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 
    End With 
End Sub 

루프는 데이터를로드하지 않습니다.

각 파일에서 Number of Columns을 얻는 방법을 알아 내야합니다.

.TextFileColumnDataTypes = Array(1, 1, 1) 

이 줄은이 파일의 세 열을 알려줍니다. 이 값은 파일 열에 따라 달라야합니다.

답변

0

마침내 얻은이 여기 내 매크로입니다.

Sub LoadTextFilesLoop() 
Dim objFSO As Object 
    Dim objFolder As Object 
    Dim objFile As Object 
    Dim ws As Worksheet 

    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    'Get the folder object associated with the directory 
    Set objFolder = objFSO.GetFolder("C:\Export\") 
    'Loop through the Files collection 
    For Each objFile In objFolder.Files 
    NewFileImport (objFile.Name) 
    Next 
    'Clean up! 
    Set objFolder = Nothing 
    Set objFile = Nothing 
    Set objFSO = Nothing 
    End Sub 

Sub NewFileImport(FileName) 
Dim fName As String 
fName = Left(FileName, Len(FileName) - 4) 
Sheets.Add After:=Sheets(Sheets.Count) 
    With ActiveSheet.QueryTables.Add(Connection:= _ 
     "TEXT;C:\Export\" + FileName, _ 
     Destination:=Range("$A$1")) 
     .Name = fName 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .TextFilePromptOnRefresh = False 
     .TextFilePlatform = 65001 
     .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 
    End With 
    ActiveSheet.Select 
    ActiveSheet.Name = Left(fName, 31) 
End Sub 
관련 문제