Skip to content

Работа с файлами VBA

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

Задача:

В обычном текстовом файле содержатся строки:

Приветствуем Вас на сайте CodeTown.ru
здесь Вы найдёте много интересных
примеров на разные темы
и на разных языках.
Наслаждайтесь=)

Необходимо вывести их на лист в Excel, чтобы каждое слово находилось в своей ячейки с учётом пробелов.

Поехали!

Sub Prog()
On Error GoTo errr
Open "C:\Users\......\vba\files\file.txt" For Input As #1
Dim s() As String
Dim i As Integer
i = 0
Do
    ReDim Preserve s(i + 1) As String
    i = i + 1
    Input #1, s(i - 1)
Loop While s(i - 1) <> ""

Если вы читали предыдущие статьи, то в курсе об обработчике ошибок On Error GoTo. Затем, Open «C:\Users\…….\vba\files\file.txt» For Input As #1 — так прописываем путь к файлу и тут должен быть прописан именно !Ваш путь!, к которому обращаемся и даём этому файлу символичный номер 1.

Далее, уже в цикле, выводим построчно с помощью Input в наш массив строк s. Также напомню, что ReDim Preserve— команда перераспределения массива с сохранением в нём данных.
Ах да, в этой части кода мы просто циклично читаем файл и заполняем строками массив s.

1:
Dim j As Integer
Dim x As Integer
Dim sl As String
Dim le As Integer
Dim u As Integer
Dim k As Integer
 
For j = 1 To i - 1
    x = 1
    u = 1
    k = 0
    Do While InStr(s(j - 1), " ") <> 0
        x = InStr(s(j - 1), " ")
        sl = Left(s(j - 1), x)
        s(j - 1) = Right(s(j - 1), Len(s(j - 1)) - x)
        k = k + 1
        Cells(j, u) = sl
        u = u + 1
    Loop
    Cells(j, u) = s(j - 1)
Next j
Close #1

errr:
 If Err.Number = 62 Then Resume 1
 
End Sub

Как видите, программа небольшая. В этом куске мы работаем с массивом строк, который получили в начале, и раскладываем каждое слово по полочкам. Запускаем цикл For для прохождения по всем записанным строкам, а While — по символам внутри строк. Мы отрезаем от строки «слова» до пробела и записываем в соответствующие ячейки.

Обязательно закрывайте файл командой Close #1 после работы над ним.

Отдельно отмечу строчку If Err.Number = 62 Then Resume 1. При чтении файла, когда компилятор дойдёт до конца, то выпадет ошибка, чей номер как раз и равен 62. То есть, с помощью этой ошибки мы выходим из чтения файла в начале всего кода.

Если Вам какие-то команды остались не ясны, советую почитать предыдущие статьи, там вы найдёте примеры на работу с ними.

Наш вывод:
7

Вот, собственно, и всё. Задавайте вопросы в комментариях. Надеюсь вы прониклись магией VBA, если же нет, читайте продолжение. =)

Скачать исходники

Опубликовано вVBA

Будьте первым, кто оставит комментарий

    Добавить комментарий