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 にコピーされていないことに気付きました。

これが発生する理由はありますか?また、最初に空白行を含むテキスト ファイルを事前にフォーマットする必要を回避する解決策はありますか?

前もって感謝します。

履歴書

4

1 に答える 1

2

接続プロパティを介してHDR=Yesを設定しました。これは、最初の行が列名を含むヘッダーであることを意味します。ヘッダー列がないため、代わりにHDR=Noを設定する必要があります。

oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
               "Data Source=" & strFilePath & ";" & _
               "Extended Properties=""text;HDR=No;FMT=Delimited"""
于 2013-06-03T13:48:45.440 に答える