2013-07-18 85 views
0

我已经写了这个,它对大部分的作品...我找到的第一个文件。关于第二个文件,我得到以下错误:将多个空格分隔文件导入到一个Excel工作表中

“的信息无法粘贴,因为复制区域和粘贴区域是不一样的尺寸和形状,请尝试以下之一:

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

我不明白我做错了什么。

假设遍历一个目录,并抓取所有.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" & RowCount)炸毁,关闭它,然后尝试粘贴第二个文件。

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

附注 我注意到,如果我换wbO.Sheets(1).Cells.Copy Destination:=wsI.Range("A" & RowCount)wbO.Sheets(1).Cells.Copy wsI.Cells,将所有文件粘贴到表的...但它之前它覆盖文件。我需要它追加并且不知道如何做到这一点。

回答

0

我回答我自己的问题通过交换逻辑在里面(文件<>“”)循环读取:

 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` 

我行数增加了两个,每次让我有进口之间的空白区域。现在一切正常,因为它应该。

0

您不会“重置”path的值。如果您的路径为 “C:\ MyFolder文件”(例如),在第一时间通过循环,你的path

“C:\ MyFolder文件\ COM \ * .TXT”

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

“C:\ MyFolder文件\ COM \ * TXT \水库\ * .TXT”

...它创建一个无效的路径。按照以下更新代码。

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

路径部分实际上像冠军一样工作。它会根据需要抓取目录中的所有文件。问题是当vba代码放到表单中时。该路径的值类似于“C:\ Comres”。根据是第一遍还是第二遍,我会去C:\ comres \ com或\ res。所以这部分不是问题,它的工作原理。 – user2597159

+0

我看到你在说什么,我把一个StaticPath变量放在修复那个小家伙的路径中,但是这仍然不能解决问题,因为它是如何将数据复制到电子表格中而不是它如何访问它。 – user2597159

相关问题