循环浏览.TXT文件的文件夹并复制其内容

时间:2018-11-06 14:21:47

标签: excel vba loops text

我正在尝试自动执行以下操作:

  1. 打开.TXT文件
  2. 全选
  3. 复制
  4. 粘贴到Excel工作表上
  5. 重复

我在目录中有150个文本文件,我想打开该目录,复制所有内容并粘贴到excel工作表中,其偏移量为'c'

每个文件正好有95行,因此例如在将C:\myDir\MyFile1粘贴到A1中之后。我想将下一个.txt文件的内容粘贴到A101中。

到目前为止,我已经整理了一些代码:

Sub LoopThroughFiles()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim StrFile As String
    Dim C as integer
    StrFile = Dir("E:\my path")

    Do While Len(StrFile) > 0
        Workbooks.Open(StrFile)
        Workbook.Sheets(1).Cells.Copy ws.range("A"& c)
        Workbook.Close
        C = C + 100     'Each txt file = 95 rows
        StrFile = Dir
    Loop
End Sub

尽管这并没有遍历列表。

2 个答案:

答案 0 :(得分:0)

您应该调查使用Excel的“ Power Query”加载项(在Excel 2016中默认情况下在产品中)。 使用Power Query,您可以简单地选择文件所在的文件夹,并非常容易地附加所有数据,而无需进行编码。您也可以在Power Query编辑器中根据需要修改数据。

Power Query

example combining 2 files

Power Query UI

答案 1 :(得分:0)

只需为工作簿添加一个变量,其中包含工作簿csvWb并串联folder(以防excel文件不在文件夹中)。此外,Excel不喜欢复制在目标中重叠的多个整张工作表,因此让我们将自己限制为Rows("1:95")(这样可以节省内存和时间)。故意省略任何错误处理(文件可能被锁定),以使示例简短。

Sub LoopThroughFiles()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim StrFile As String
    Dim C As Integer
    Dim csvWb As Workbook
    Dim folder As String
    folder = "E:\my path\"
    StrFile = Dir(folder)

    Set ws = ThisWorkbook.ActiveSheet
    C = 1
    Do While Len(StrFile) > 0
        Set csvWb = Workbooks.Open(folder & StrFile)
        csvWb.Sheets(1).Rows("1:95").Copy ws.Range("A" & C) 'Each txt file = 95 rows
        csvWb.Close
        C = C + 100     'Each txt file = 95 rows
        StrFile = Dir
    Loop
End Sub