Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excel vba-将.txt(制表符删除)文件的文件夹导入下一行_Excel_Vba - Fatal编程技术网

excel vba-将.txt(制表符删除)文件的文件夹导入下一行

excel vba-将.txt(制表符删除)文件的文件夹导入下一行,excel,vba,Excel,Vba,我一直在绞尽脑汁试图在excel中创建一个宏,它可以打开特定文件夹中的所有.txt文件,并将它们导入下一行。数据以制表符分隔,第一个文件需要导入单元格B8、下一个文件B9、下一个B10等 我对这段代码的理解是80%,但它将所有数据导入一个单元格(B8),而不是以制表符分隔的行(B8、C8、D8、E8等) 我建议继续您在评论中提到的操作,使用Workbooks.OpenText打开每个文件,然后将打开的工作簿中的每一行复制到指定的工作表中 Sub Read_Text_Files() Dim

我一直在绞尽脑汁试图在excel中创建一个宏,它可以打开特定文件夹中的所有.txt文件,并将它们导入下一行。数据以制表符分隔,第一个文件需要导入单元格B8、下一个文件B9、下一个B10等

我对这段代码的理解是80%,但它将所有数据导入一个单元格(B8),而不是以制表符分隔的行(B8、C8、D8、E8等)


我建议继续您在评论中提到的操作,使用Workbooks.OpenText打开每个文件,然后将打开的工作簿中的每一行复制到指定的工作表中

Sub Read_Text_Files()
    Dim sPath As String
    Dim oPath, oFile, oFSO As Object
    Dim r, iRow As Long
    Dim wbImportFile As Workbook
    Dim wsDestination As Worksheet

    'Files location
    sPath = "C:\Test\"
    Set wsDestination = ThisWorkbook.Sheets("Sheet1")

    r = 8
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oPath = oFSO.GetFolder(sPath)
    Application.ScreenUpdating = False
    For Each oFile In oPath.Files
        If LCase(Right(oFile.Name, 4)) = ".txt" Then
            'open file to impor
            Workbooks.OpenText Filename:=oFile.Path, Origin:=65001, StartRow:=1, DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, FieldInfo:=Array(1, 1), _
            TrailingMinusNumbers:=True
            Set wbImportFile = ActiveWorkbook
            For iRow = 1 To wbImportFile.Sheets(1).UsedRange.Rows.Count
                wbImportFile.Sheets(1).Rows(iRow).Copy wsDestination.Rows(r)
                r = r + 1
            Next iRow
            wbImportFile.Close False
            Set wbImportFile = Nothing
        End If
    Next oFile
End Sub

ps:我有VBA,它允许将数据导入电子表格,并将数据粘贴到单个单元格中(以制表符分隔),但我不知道如何将两者联系在一起
'打开文本文件工作簿。OpenText文件名:=strInFile,Origin:=65001,StartRow:=1,DataType:=xlDelimited,uTextQualifier:=xlDoubleQuote,continuedElimiter:=False,Tab:=True,FieldInfo:=Array(1,1),uLingMinusNumbers:=True
你说第一个文件进入B8,下一个进入B9,等等。。。每个文件是否只有一行长?您可以使用
Split(sLine,vbTab)
创建一个值数组,然后将其分配给工作表。嘿,罗斯,非常感谢您的回答-它正是我现在需要的:)您知道如何将此粘贴到B列而不是A列吗?尝试了两种方法,但不断出现调试错误@当然,只需将行
wbImportFile.Sheets(1).Rows(iRow).复制wsDestination.Rows(r)
wbImportFile.Sheets(1).UsedRange.Rows(iRow).复制wsDestination.Cells(r,2)
这将代替复制整行,只复制UsedRange单元格,并插入目标工作簿的第2列。嘿,罗斯-完美,这正是我所需要的。对你的帮助我感激不尽!:)
Sub Read_Text_Files()
    Dim sPath As String
    Dim oPath, oFile, oFSO As Object
    Dim r, iRow As Long
    Dim wbImportFile As Workbook
    Dim wsDestination As Worksheet

    'Files location
    sPath = "C:\Test\"
    Set wsDestination = ThisWorkbook.Sheets("Sheet1")

    r = 8
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oPath = oFSO.GetFolder(sPath)
    Application.ScreenUpdating = False
    For Each oFile In oPath.Files
        If LCase(Right(oFile.Name, 4)) = ".txt" Then
            'open file to impor
            Workbooks.OpenText Filename:=oFile.Path, Origin:=65001, StartRow:=1, DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, FieldInfo:=Array(1, 1), _
            TrailingMinusNumbers:=True
            Set wbImportFile = ActiveWorkbook
            For iRow = 1 To wbImportFile.Sheets(1).UsedRange.Rows.Count
                wbImportFile.Sheets(1).Rows(iRow).Copy wsDestination.Rows(r)
                r = r + 1
            Next iRow
            wbImportFile.Close False
            Set wbImportFile = Nothing
        End If
    Next oFile
End Sub