Создание, открытие текстового файла из кода VBA Excel, создание связанного с ним объекта TextStream для чтения, записи и добавления информации в файл.
Свойства объекта TextStream
Свойство | Описание |
---|---|
AtEndOfLine | Возвращает значение типа Boolean: True – указатель файла (курсор) находится непосредственно перед маркером конца строки, False – расположение указателя другое. |
AtEndOfStream | Возвращает значение типа Boolean: True – указатель файла (курсор) находится в конце файла TextStream, False – расположение указателя другое. |
Column | Возвращает номер столбца текущего положения символа в файле TextStream. |
Line | Возвращает номер текущей строки в файле TextStream. |
Методы объекта TextStream
Метод | Описание |
---|---|
Close | Закрывает открытый текстовый файл. |
Read | Считывает указанное число символов из файла TextStream и возвращает результат. |
ReadAll | Считывает весь текстовый файл и возвращает результат. |
ReadLine | Считывает одну строку из файла и возвращает результат. |
Skip | Пропускает указанное число символов при чтении файла. |
SkipLine | Пропускает следующую строку при чтении файла. |
Write | Записывает указанный текст в файл TextStream. |
WriteBlankLines | Записывает указанное число символов новой строки в текстовый файл. |
WriteLine | Записывает указанный текст и символ новой строки в файл TextStream. |
Примеры работы с файлами
Для реализации примеров создайте на диске «C» папку «DATA» или в коде примеров замените ее имя на имя любой своей папки на этом диске.
Пример 1
Создание нового текстового файла и запись в него данных:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub Primer1() Dim fso, fl, ws 'Создаем новый экземпляр объекта FileSystemObject Set fso = CreateObject("Scripting.FileSystemObject") 'Присваиваем переменной fl экземпляр объекта TextStream, 'связанный с созданным файлом и открытым для записи Set fl = fso.CreateTextFile("C:\DATA\myfile.txt") With fl 'Записываем три строки с текстом в файл .WriteLine ("Первая строка с символом новой строки.") .WriteLine ("Вторая строка с символом новой строки.") .Write ("Третья строка без символа новой строки.") 'Закрываем файл и объект TextStream .Close End With 'Открываем файл для просмотра Set ws = CreateObject("WScript.Shell") ws.Run "C:\DATA\myfile.txt" End Sub |
Рекомендую открывать файлы для просмотра методом ThisWorkbook.FollowHyperlink. Пример и преимущества этого метода в статье VBA Excel. Открыть файл другой программы.
Пример 2
Открываем созданный кодом VBA Excel из первого примера текстовый файл myfile.txt в режиме добавления данных, дополняем третью и записываем четвертую строку:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Sub Primer2() 'Осуществляем раннюю привязку объектов 'FileSystemObject и TextStream Dim fso As New FileSystemObject, _ fl As TextStream, ws As Object 'Присваиваем переменной fl экземпляр объекта TextStream, 'связанный с файлом, открытым для добавления данных Set fl = fso.OpenTextFile("C:\DATA\myfile.txt", 8) With fl 'Записываем дополнительный текст в третью строку 'с символом новой строки и четвертую строку .WriteLine (" Добавили символ новой строки.") .Write ("Четвертая строка без символа новой строки.") 'Закрываем файл и объект TextStream .Close End With 'Открываем файл для просмотра Set ws = CreateObject("WScript.Shell") ws.Run "C:\DATA\myfile.txt" End Sub |
Какую использовать привязку, раннюю или позднюю, выбор за вами. При ранней привязке становится доступен лист автоматической вставки свойств-методов, который открывается после ввода переменной и точки.
Режим открытия текстового файла (чтение, запись, добавление информации) зависит от параметра iomode метода OpenTextFile.
Пример 3
Открываем текстовый файл myfile.txt в режиме чтения и считываем второе предложение из третьей строки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub Primer3() Dim fso As New FileSystemObject, _ fl As TextStream, txt As String 'Присваиваем переменной fl экземпляр объекта TextStream, 'связанный с файлом myfile.txt, открытым для чтения Set fl = fso.OpenTextFile("C:\DATA\myfile.txt", 1) With fl 'Пропускаем первую строку .SkipLine 'Пропускаем вторую строку .SkipLine 'Пропускаем 40 символов третьей строки .Skip (40) 'Считываем остаток третьей строки и 'отображаем его в окне MsgBox MsgBox .ReadLine .Close End With End Sub |
Получаем результат:
При открытии текстового файла в режиме чтения, параметр iomode метода OpenTextFile можно было не указывать, так как режим чтения для этого параметра является значением по умолчанию.