Текстовые файлы в VBA
Чтобы начать работу с файлом, его необходимо открыть: Open For As # Имя файла – строка, указывающая полный путь к файлу Режим – режим открытия файла: для записи, для чтения, для добавления Номер канала – целое число от 1 до 511. Номер канала является глобальным. Каждому открытому файлу должен соответствовать свой номер канала. Пример: Open "Н:\MyFile.txt" For Output As #1 Открывается для записи файл MyFile.txt на диске Н:, ему в соответствие ставится канал с номером 1.
Рассмотрим более подробно режимы открытия файлов Для записи (для вывода) Output В этом случае создается новый пустой файл с указанным именем. Мы можем только записывать в него. Для записи используется оператор Print Print #, Пример: Print #1, Добрый день Записывает строчку Добрый день в файл, связанный с каналом 1. Каждый новый оператор Print записывает текст в файл с новой строки.
После окончания работы с файлом его необходимо закрыть Для этого используется оператор Close Close # Пример: Sub GoodDay() Open H:\MyFile.txt" For Output As #1 Print #1, Добрый день Close #1 End Sub
Рассмотрим следующую программу Sub my() Dim K As Integer Open H:\MyFile.txt" For Output As #1 For K = 1 To 7 Print #1, Str(K) + "-й день недели - " + WeekdayName(K) Next K Close #1 End Sub Вопрос Что запишется в файл?
1-й день недели - понедельник 2-й день недели - вторник 3-й день недели - среда 4-й день недели - четверг 5-й день недели - пятница 6-й день недели - суббота 7-й день недели - воскресенье
Как было сказано ранее, при открытии файла в режиме Output, создается новый пустой файл. Если необходимо добавить строки к уже существующему файлу, то его надо открыть для добавления Open "H:\MyFile.txt" For Append As #1 В этом случае открывается существующий файл, курсор устанавливается после последней строчки. Операторы Print будут добавлять новый текст далее.
Если необходимо получить данные из уже существующего текстового файла, то его надо открыть для чтения (для ввода) Open H:\MyFile.txt" For Input As #1 В этом случае открывается существующий файл, курсор устанавливается на начало первой строчки. Для получения данных из файла (чтения из файла) используют следующий оператор Line Input #, При каждом использовании этого оператора в записывается текущая строка файла, а курсор перемещается в начало следующей строки
Рассмотрим следующий пример Sub Example1() Dim S As String Open H:\MyFile.txt" For Input As #1 Line Input #1, S MsgBox S Close #1 End Sub При каждом запуске процедуры будем получать
Следующая процедура Sub Example2() Dim K As Integer Dim S As String Open H:\MyFile.txt" For Input As #1 For K = 1 To 7 Line Input #1, S ActiveSheet.Cells(K, 1).Value = S Next K Close #1 End Sub Заполнит ячейки с A1 по A7 содержимым файла.
Не всегда известно количество строк в файле. В этом случае необходимо воспользоваться логической функцией EOF ( ) Она возвращает истину, если достигнут конец файла, и ложь в противном случае. Обратите внимание, что знак # перед номером канала не ставится. Sub Example3() Dim K As Integer Dim S As String Open "H:\MyFile.txt" For Input As #1 K = 0 Do Until EOF(1) Line Input #1, S K = K + 1 ActiveSheet.Cells(K, 1).Value = S Loop Close #1 End Sub
Если в программе используется много файлов, которые периодически открываются и закрываются, то нелегко уследить за тем, какие номера каналов используются, а какие свободны. В этом случае удобно использовать функцию FreeFile, которая возвращает номер первого свободного канала. Sub Example4() Dim K As Integer Dim N As Integer Dim S As String N = FreeFile Open " H:\ MyFile.txt" For Input As #N K = 0 Do Until EOF(N) Line Input #N, S K = K + 1 ActiveSheet.Cells(K, 1).Value = S Loop Close #N End Sub
Задачи Задача 1 Написать программу, которая переписывает в текстовый файл содержимое всех выделенных ячеек (для каждой ячейки отдельная строка файла). Имя файла вводится с клавиатуры. Задача 2 Написать программу, которая подсчитает сколько раз встречается в текстовом файле заданная строка. Имя файла и искомая строка вводятся с клавиатуры. Задача 3 Написать программу, которая запишет во второй текстовый файл номера тех строк первого текстового файла, которые совпадают с заданной строкой. Имена файлов и искомая строка вводятся с клавиатуры.