2013-07-18 87 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

相關問題