2013-06-03 5 views
0

무시 : 나는 코드가 완벽하지만 일하고 생각 텍스트 복사는 아래 그림과 같이 내가 ADO를 사용하여 Excel로 텍스트 파일을 가져 오는 몇 가지 코드를 사용한 첫 번째 행

Sub ImportTextFile() 
    'Imports text file into Excel workbook using ADO. 
    'If the number of records exceeds 65536 then it splits it over more than one sheet. 

     Dim strFilePath As String, strFilename As String, strFullPath As String 
     Dim lngCounter As Long 
     Dim oConn As Object, oRS As Object, oFSObj As Object 

     'Get a text file name 
     strFullPath = Application.GetOpenFilename("Text Files (*.txt),*.txt", , "Please select text file...") 

     If strFullPath = "False" Then Exit Sub 'User pressed Cancel on the open file dialog 

     'This gives us a full path name e.g. C:\temp\folder\file.txt 
     'We need to split this into path and file name 
     Set oFSObj = CreateObject("SCRIPTING.FILESYSTEMOBJECT") 

     strFilePath = oFSObj.GetFile(strFullPath).ParentFolder.Path 
     strFilename = oFSObj.GetFile(strFullPath).Name 

     'Open an ADO connection to the folder specified 
     Set oConn = CreateObject("ADODB.CONNECTION") 
     oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
        "Data Source=" & strFilePath & ";" & _ 
        "Extended Properties=""text;HDR=Yes;FMT=Delimited""" 

     Set oRS = CreateObject("ADODB.RECORDSET") 

     'Now actually open the text file and import into Excel 
     oRS.Open "SELECT * FROM [" & strFilename & "]", oConn, 3, 1, 1 
     While Not oRS.EOF 
      Sheets("Sheet1").Select 
      ActiveSheet.Range("A1").CopyFromRecordset oRS, 65536 
      Range("A1").Select 
      Range(Selection, Selection.End(xlToRight)).Select 
      Range(Selection, Selection.End(xlDown)).Select 
      Selection.Copy 
      Range("C1").Select 
      ActiveSheet.Paste 
      Range("E1").Select 
      ActiveSheet.Paste 
      . 
      . 
      . 
      Range("CW1").Select 
      ActiveSheet.Paste 
      Range("CY1").Select 
      ActiveSheet.Paste 

      Range("A1").Select 
      Range(Selection, Selection.End(xlToRight)).Select 
      Range(Selection, Selection.End(xlDown)).Select 
      Selection.Copy 
      Sheets("Recorder Log").Select 
      Range("A9").Select 
      ActiveSheet.Paste 

      Range("C8").Select 
      Range(Selection, Selection.End(xlToRight)).Select 
      Application.CutCopyMode = False 
      Selection.Copy 
      Range("C9").Select 
      Range(Selection, Selection.End(xlToRight)).Select 
      Range(Selection, Selection.End(xlDown)).Select 
      ActiveSheet.Paste 

      Sheets("Sheet1").Select 
      Cells.Select 
      Selection.Delete Shift:=xlUp 
      Sheets("Recorder Log").Select 
      Range("C9").Select 
     Wend 

     oRS.Close 
     oConn.Close 

    End Sub 

가져 오는 파일의 첫 번째 텍스트 줄이 Excel로 복사되지 않는다는 것을 알았습니다.

이 문제가 발생하는 이유는 무엇입니까? 처음에는 빈 행으로 텍스트 파일을 미리 형식화하지 않아도되는 해결책이 있습니까?

미리 감사드립니다. 당신은 연결 속성을 통해 설정 한

+0

최초의 행에 원래 텍스트 파일에있는 내용 - 열 머리글이 있습니까? 아니면 열 머리글이 없습니다. ?? –

+0

열 머리글이 없습니다. – CluelessVoid

+1

그래서 이것을 변경해보십시오 : 코드에서'HDR = Yes'를'HDR = No'로 변경하십시오 ... –

답변

2

CV는 HDR = 예 능가하는는 첫 번째 행에 열 이름이 포함 된 헤더 것을 의미한다. 헤더 열이 없으므로 대신 HDR = 아니요으로 설정해야합니다.

oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
       "Data Source=" & strFilePath & ";" & _ 
       "Extended Properties=""text;HDR=No;FMT=Delimited""" 
+0

감사합니다. @ KazJaw에게 감사드립니다. – CluelessVoid