2013-07-18 2 views
0

Я написал это и работает по большей части ... для первого найденного файла. на втором файле, я получаю следующее сообщение об ошибке:.Импорт нескольких файлов с разделителями пространства в один лист Excel

«Информация не может быть вставлен, потому что область копирования и область пасты не имеют одинаковый размер и форму Попробуйте выполнить одно из следующих действий:

  • Нажмите одну ячейку, а затем вставить.
  • Выберите прямоугольник, который является того же размера и формы, а затем вставьте. "

Я не понимаю, что я делаю неправильно.

Предположим, что нужно пройти по каталогу и захватить все файлы .txt, которые есть, и импортировать их в Лист1 или Лист2. Я могу получить первый, чтобы импортировать отлично, но следующий файл выдает эту ошибку вместо добавления к той же электронной таблице.

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

Я ответил на мой собственный вопрос, меняя логику внутри цикла While (Файл <> «») следующим образом:

 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 \ ком \ * .txt"

Когда вы идете через цикл снова, путь становится ...

"C:.. \ MyFolder \ ком \ * .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