2013-12-05 2 views
4

Я пытаюсь прочитать текстовый файл с помощью vba. Я попробовал код нижечтение всего текстового файла с помощью vba

Open "C:\tester.txt" For Input As #1 
Worksheets("UI").Range("H12").Value = Input$(LOF(1), 1) 
Close #1 

Когда я запускаю это, я получаю сообщение об ошибке.

Ошибка времени выполнения '62'. Введите конец файла.

Содержание текстового файла:

Невозможно открыть COM10. Убедитесь, что он подключен
Plus другие вещи
И еще вещи
путь больше материала

Заранее спасибо за помощь.

+1

Этот предыдущий ответ на ту же тему может быть полезно: http://stackoverflow.com/questions/11528694/read-parse-text-file-line-by-line-in-vba –

+0

Спасибо, Хансен. Но мой текстовый файл может иметь несколько строк. В сообщении, которое вы указали, я могу прочитать только одну строку. Но я хочу прочитать весь текстовый файл. Мой текстовый файл может иметь несколько строк. – Sanket

+0

Возможный дубликат [Импорт 100 текстовых файлов в Excel сразу] (http://stackoverflow.com/questions/19410503/importing-100-text-files-into-excel-at-once) –

ответ

2

Следующий код будет проходить через каждую строку текстового документа и печатать их с диапазона H12 и вниз в пользовательском листе.

Sub ImportFromText() 
    Open "C:\tester.txt" For Input As #1 
    r = 0 
    Do Until EOF(1) 
     Line Input #1, Data 
     Worksheets("UI").Range("H12").Offset(r, 0) = Data 
     r = r + 1 
    Loop 
    Close #1 
End Sub 
+0

Привет, еще раз. Ваш код работает !! .. но я получаю два дополнительных символа в первой строке. Мой первый вывод строки выглядит так: ÿþ Можно открыть COM10. Убедитесь, что он подключен. Я попытался использовать метод fucntion и workheets.clean, но он не удаляет эти дополнительные charecters. любая помощь по этому поводу? – Sanket

+0

Я использовал это Рабочие листы («UI»). Диапазон («H12»). Value = Right (Рабочие листы («UI»). Диапазон («H12»). Значение, Len (Рабочие листы («UI»). Диапазон ("H12").Значение) - 2) Благодарим за помощь. Установление вашего ответа в качестве правильного ответа. – Sanket

+1

Два символа появляются потому, что вы читаете из текстового документа в формате Юникод. Чтобы этого избежать, вам придется использовать метод OpenTextFile, который может открывать и понимать формат Unicode. Это, однако, совершенно другой синтаксис того, что вы используете сейчас. –

9

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

Изменить путь от C:\temp\test.txt на заказ. Ответ

Sub Qantas_Delay() 
Dim objFSO As Object 
Dim objTF As Object 
Dim strIn 'As String 
Dim X 

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objTF = objFSO.OpenTextFile("C:\temp\test.txt", 1) 
strIn = objTF.readall 
X = Split(strIn, vbNewLine) 
[h12].Resize(UBound(X) + 1, 1) = Application.Transpose(X) 
objTF.Close 

End Sub 
+0

Hey brettdj, Когда я запускал ваш код, я получаю «ÿþU» в H12, независимо от содержимого тестового файла. Любое предложение о том, как отформатировать его? – Sanket

+0

Можете ли вы сделать свой тестовый файл доступным? – brettdj

+1

+ 1 Гораздо лучший метод, чем цикл ... Подобный подход (быстрее, чем fso) упоминается в двух ссылках ниже вопроса op ... –

0

brettdj, в слегка корректируется

Public Function readFileContents(ByVal fullFilename As String) As String 
    Dim objFSO As Object 
    Dim objTF As Object 
    Dim strIn As String 

    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    Set objTF = objFSO.OpenTextFile(fullFilename, 1) 
    strIn = objTF.readall 
    objTF.Close 

    readFileContents = strIn 
End Function 
2

Чтобы прочитать построчно:

Public Sub loadFromFile(fullFilename As String) 

    Dim FileNum As Integer 
    Dim DataLine As String 

    FileNum = FreeFile() 
    Open fullFilename For Input As #FileNum 

    While Not EOF(FileNum) 
     Line Input #FileNum, DataLine 
     Debug.Print DataLine 
    Wend 
End Sub 
0

Я думаю, проще альтернатива Data>From Text и вы можете указать, как часто данные обновлен в свойствах.

1
Sub LoadFile() ' load entire file to string 
' from Siddharth Rout 
' http://stackoverflow.com/questions/20128115/ 
    Dim MyData As String 
    Open "C:\MyFile" For Binary As #1 
    MyData = Space$(LOF(1)) ' sets buffer to Length Of File 
    Get #1, , MyData ' fits exactly 
    Close #1 
End Sub 
0

Больше слегка модифицирован для тех, кто не нравится, VBA, чтобы восполнить явные переменные, а затем передавать данные времени отходы их .. Пусть с помощью. сделать работу

Function LoadFileStr$(FN$) 

    With CreateObject("Scripting.FileSystemObject") 

      LoadFileStr = .OpenTextFile(FN, 1).readall 

     End With 

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