2013-06-03 165 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中。

是否有任何理由爲什麼會發生這種事,是有一個解決方案,以避免對預格式化用在開始一個空白行的文本文件?

在此先感謝。

CV

+0

什麼是在您的原始文本文件中的第一行 - 是否有列標題或內部沒有列標題? –

+0

沒有列標題。 – CluelessVoid

+1

所以,試着改變這個:'HDR = Yes'到你的代碼裏面的'HDR = No' ... –

回答

2

您已設置,通過連接屬性,HDR =是,其出類拔萃意味着第一行包含列名的標題。由於您沒有標題欄,因此應該設置HDR =否

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

非常感謝@KazJaw – CluelessVoid