2012-03-23 3 views
2

У меня около 600 текстовых файлов. Каждый файл содержит 2 столбца и равен space delimited. Есть ли способ импортировать все из них в одну таблицу Excel?Импорт нескольких текстовых файлов в Excel

Я видел сообщение об этом и использовал следующий скрипт, но это не сработало для меня. Это даваемое мне User-defined type not defined

Sub ReadFilesIntoActiveSheet() 
Dim fso As FileSystemObject 
Dim folder As folder 
Dim file As file 
Dim FileText As TextStream 
Dim TextLine As String 
Dim Items() As String 
Dim i As Long 
Dim cl As Range 

' Get a FileSystem object 
Set fso = New FileSystemObject 

' get the directory you want 
Set folder = fso.GetFolder("D:\mypath\") 

' set the starting point to write the data to 
Set cl = ActiveSheet.Cells(1, 1) 

' Loop thru all files in the folder 
For Each file In folder.Files 
    ' Open the file 
    Set FileText = file.OpenAsTextStream(ForReading) 

    ' Read the file one line at a time 
    Do While Not FileText.AtEndOfStream 
     TextLine = FileText.ReadLine 

     ' Parse the line into | delimited pieces 
     Items = Split(TextLine, "|") 

     ' Put data on one row in active sheet 
     For i = 0 To UBound(Items) 
      cl.Offset(0, i).Value = Items(i) 
     Next 

     ' Move to next row 
     Set cl = cl.Offset(1, 0) 
    Loop 

    ' Clean up 
    FileText.Close 
Next file 

Set FileText = Nothing 
Set file = Nothing 
Set folder = Nothing 
Set fso = Nothing 

End Sub 

`

Спасибо за помощь!

+0

Либо добавьте «Windo» ws Scripting Runtime' Ссылка, упомянутая ниже, или изменить эти две строки: 'Dim fso As FileSystemObject' и' Dim FileText As TextStream' на '... As Object', а затем' Set fso = New FileSystemObject' 'Установить fso = CreateObject ("Scripting.FileSystemObject") '. Также сделайте изменения, упомянутые ниже @mkingston. – transistor1

ответ

3

Скорее всего вам необходимо установить ссылку на объектную модель Windows Scripting Host Object.

Для этого из редактора Visual Basic выберите «Инструменты/Ссылки», затем прокрутите страницу вниз, чтобы найти «Объектная модель хоста Windows Script». Отметьте это поле, затем нажмите OK. Теперь попробуйте снова запустить код.

Кроме того, я заметил, что вы указываете, что ваши данные разделены на два столбца и разделены пробелами. Вам нужно заменить разделитель на следующей строке:

Items = Split(TextLine, "|") 

С этим:

Items = Split(TextLine, " ") 

Наконец, вы бы немного лучше заменить это:

For i = 0 To UBound(Items) 
    cl.Offset(0, i).Value = Items(i) 
Next 

С это:

cl.Resize(1,UBound(Items)-LBound(Items)+1).value = Items 
+0

И как мне это сделать? (Я не знаю о визуальных базовых) – dawnoflife

+0

Извините! Измененный. – mkingston

+0

Когда я выбираю Инструменты -> Ссылки. Этот вариант недоступен для меня. Я имею в виду, что он не выделен/не доступен для клика . Я вставил код, выбирая опцию «добавить новый модуль» после нажатия клавиши «Alt + F11» на листе. Спасибо за помощь! – dawnoflife

Смежные вопросы