【问题标题】:Import Multiple space delimited files into one Excel Sheet将多个空格分隔的文件导入到一张 Excel 工作表中
【发布时间】:2013-07-19 23:17:29
【问题描述】:

我已经写了这个并且它在大多数情况下都有效......对于我找到的第一个文件。在第二个文件上,我收到以下错误:

“无法粘贴信息,因为复制区域和粘贴区域的大小和形状不同。请尝试以下方法之一:

  • 单击单个单元格,然后粘贴。
  • 选择一个矩形 大小和形状相同,然后粘贴。”

我不明白我做错了什么。

假设遍历一个目录并抓取那里的所有 .txt 文件并将它们导入到 Sheet1 或 Sheet2 中。我可以让第一个文件正常导入,但下一个文件会引发该错误,而不是附加到同一个电子表格中。

Sub PopulateSheets()

    Dim file As String, path As String, fullpath As String, StaticPath As String
    Dim count As Integer
    Dim wbI As Workbook, wbO As Workbook
    Dim wsI As Worksheet
    Dim Sheet As String
    Dim RowCount As Long
    On Error GoTo Errorcatch

    RowCount = 1
    count = 1
    StaticPath = Sheet3.Cells(2, 7)
    While (count <= 2)

        If count = 1 Then
            path = StaticPath & "\com\*.txt"
        Else
            path = StaticPath & "\res\*.txt"
        End If
        file = Dir(path)
        Sheet = "Sheet" & count
        While (file <> "")
            fullpath = Left(path, InStr(1, path, "*.txt") - 1) & file
            Set wbI = ThisWorkbook
            Set wsI = wbI.Sheets(Sheet) '<~~ Sheet where I want to import
            Set wbO = Workbooks.Open(fullpath)
            RowCount = wsI.Range("A:A").CurrentRegion.Rows.count
            wbO.Sheets(1).Cells.Copy Destination:=wsI.Range("A" & RowCount)
            wbO.Close SaveChanges:=False
            file = Dir 'Grab Next File
        Wend
        count = count + 1
    Wend
Exit Sub

Errorcatch:
MsgBox Err.Description

End Sub

它在粘贴第一个文件中的信息后在wbO.Sheets(1).Cells.Copy Destination:=wsI.Range("A" &amp; RowCount) 爆炸,关闭它,然后尝试粘贴第二个文件。

在这一点上任何帮助将不胜感激。

附注 我注意到,如果我将wbO.Sheets(1).Cells.Copy Destination:=wsI.Range("A" &amp; RowCount)wbO.Sheets(1).Cells.Copy wsI.Cells 交换,它会将所有文件粘贴到工作表中......但它会覆盖它之前的文件。我需要它附加,但不知道如何实现。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您不会“重置”path 的值。如果你的路径是“C:\MyFolder”(例如),第一次通过循环,你的path

    “C:\MyFolder\com\*.txt”

    当你再次通过循环时,路径变为......

    “C:\MyFolder\com\*.txt\res\*.txt”

    ...这会创建一个无效的路径。如下更新代码。

    count = count + 1
    ' ADD THE LINE BELOW TO YOUR CODE
    path = Sheet3.Cells(2, 7)
    

    【讨论】:

    • 路径部分实际上就像一个冠军。它会根据需要获取目录中的所有文件。问题是当 vba 代码将其放入工作表时。路径的值类似于“C:\Comres”。根据是第一遍还是第二遍,我转到 C:\comres\com 或 \res。所以这部分不是问题,它有效。
    • 我明白你在说什么,我放了一个 StaticPath 变量来保存修复那个小家伙的路径,但这仍然无济于事,因为它是如何将数据复制到电子表格中的而不是它如何访问它。
    【解决方案2】:

    我通过交换 While (File "") 循环中的逻辑来回答我自己的问题:

           fullpath = Left(path, InStr(1, path, "*.txt") - 1) & file
            Set wbO = Workbooks.Open(fullpath)
            RowCount = wsI.UsedRange.Rows.count
            SourceRowCount = wbO.Sheets(1).Range("A:A").CurrentRegion.Rows.count
            If RowCount <> 1 Then
                RowCount = RowCount + 2
                SourceRowCount = RowCount + SourceRowCount
            End If
            wbO.Sheets(1).Range("$A$1:$n$" & SourceRowCount).Copy Destination:=wsI.Range("A" & RowCount & ":$n$" & SourceRowCount)
            wbO.Close SaveChanges:=False
            file = Dir 'Grab Next File`
    

    我的行数每次都增加两个,这样我在导入之间就有了一个空格。现在一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多