Vba как открыть текстовый файл
Ниже приведен справочник по объекту FileSystemObject, который умеет работать с файлами, каталогами, файловыми потоками. Данный объект позволяет читать файлы, писать в файлы, получать информацию о файлах и др. Данный объект используется в ОС Windows, в некоторых скриптовых языках.
1. Создание объекта
2. Свойства
2.1. Drives
Замечание: только чтение.
3. Методы
3.1. CreateFolder
Назначение: создаёт каталог с указанным именем.
3.2. CopyFile
Назначение: копирует один или несколько файлов.
3.3. CopyFolder
Назначение: рекурсивно копирует каталог.
Описание: процесс копирования прерывается после первой возникшей ошибки.
3.4. MoveFile
Назначение: перемещает один или несколько файлов.
Описание: процесс перемещения прерывается после первой возникшей ошибки. Если перемещаемый файл уже существует или является папкой в Destination, возникнет ошибка.
3.5. MoveFolder
Назначение: рекурсивно перемещает один или несколько каталогов.
Описание: процесс перемещения прерывается после первой возникшей ошибки. Если перемещаемый каталог уже существует или является файлом в Destination, возникнет ошибка.
3.6. DeleteFile
Назначение: удаляет указанный файл.
3.7. DeleteFolder
Назначение: удаляет указанную папку.
3.8. BuildPath
3.9. GetAbsolutePathName
Назначение: возвращает полный путь для заданного относительного пути (из текущего каталога).
3.10. GetBaseName
Назначение: возвращает имя (без расширения) последнего компонента в заданном пути.
3.11. GetExtensionName
Назначение: возвращает расширение последнего компонента в заданном пути.
3.12. GetFileName
Назначение: возвращает имя (с расширением) последнего компонента в заданном пути.
3.13. GetParentFolderName
Назначение: возвращает путь к последнему компоненту в заданном пути (его каталог).
3.14. GetDriveName
Назначение: возвращает имя диска в заданном пути.
3.15. DriveExists
Назначение: возвращает True, если указанный диск сущесвтвует, и False в противном случае.
Назначение: возвращает True, если указанный файл сущесвтвует, и False в противном случае.
Назначение: возвращает True, если указанный каталог сущесвтвует, и False в противном случае.
3.19. GetFile
Описание: если файл не существует, произойдёт ошибка.
3.20. GetFolder
Описание: если каталог не существует, произойдёт ошибка.
3.21. GetSpecialFolder
Описание: если каталог не существует, произойдёт ошибка.
3.22. GetTempName
Назначение: возвращает случайным образом сгенерированное имя файла, которое может быть использовано для создания временного файла.
3.23. CreateTextFile
3.24. OpenTextFile
3.25. GetStandardStream
Описание: метод применим при запуске административного скрипта в консоли с помощью CScript.exe.
3.26. GetFileVersion
Назначение: возвращает номер версии исполняемого файла (строка).
4. Объект Drive
4.1. Создание объекта
4.2. Свойства
4.2.1. AvailableSpace
Замечание: только чтение.
4.2.2. DriveLetter
Замечание: только чтение.
4.2.3. DriveType
Замечание: только чтение.
4.2.4. FileSystem
Замечание: только чтение.
4.2.5. FreeSpace
Замечание: только чтение.
4.2.6. IsReady
Замечание: только чтение.
4.2.7. Path
Замечание: только чтение.
4.2.8. RootFolder
Замечание: только чтение.
4.2.9. SerialNumber
Замечание: только чтение.
4.2.10. ShareName
Замечание: только чтение.
4.2.11. TotalSize
Замечание: только чтение.
4.2.12. VolumeName
Замечание: чтение и запись.
5. Объект File
5.1. Создание объекта
5.2. Свойства
5.2.1. Attributes
Возвращаемое значение: число, набор флагов атрибутов файла. Флаги:
Замечание: чтение и запись или только чтение, в зависимости от атрибута.
Возвращаемое значение: дата создания файла.
Замечание: только чтение.
5.2.3. DateLastAccessed
Возвращаемое значение: дата последнего доступа к файлу.
Замечание: только чтение.
5.2.4. DateLastModified
Возвращаемое значение: дата последней модификации файла.
Замечание: только чтение.
5.2.5. Drive
Замечание: только чтение.
5.2.6. Name
Возвращаемое значение: имя файла.
Замечание: чтение и запись.
5.2.7. ParentFolder
Замечание: только чтение.
5.2.8. Path
Возвращаемое значение: полный путь к файлу.
Замечание: только чтение.
5.2.9. ShortName
Возвращаемое значение: короткое имя файла в формате 8.3.
Замечание: только чтение.
5.2.10. ShortPath
Возвращаемое значение: короткий путь к файлу в формате 8.3.
Замечание: только чтение.
5.2.11. Size
Возвращаемое значение: размер файла в байтах.
Замечание: только чтение.
5.2.12. Type
Возвращаемое значение: тип файла. Информация, похожая на ту, которую можно увидеть в палитре свойств файла в проводнике.
Замечание: только чтение.
5.3. Методы
5.3.1. Copy
Назначение: копирует файл в указанное место.
5.3.2. Move
Назначение: перемещает файл в указанное место.
5.3.3. Delete
Назначение: удаляет файл.
5.3.4. OpenAsTextStream
6. Объект Folder
6.1. Создание объекта
6.2. Свойства
6.2.1. Attributes
Возвращаемое значение: число, набор флагов атрибутов папки. Флаги:
Замечание: чтение и запись или только чтение, в зависимости от атрибута.
Возвращаемое значение: дата создания каталога.
Замечание: только чтение.
6.2.3. DateLastAccessed
Возвращаемое значение: дата последнего доступа к каталогу.
Замечание: только чтение.
6.2.4. DateLastModified
Возвращаемое значение: дата последней модификации каталога.
Замечание: только чтение.
6.2.5. Drive
Замечание: только чтение.
6.2.6. IsRootFolder
Возвращаемое значение: булево (число). Признак того, является ли каталог корневым.
Замечание: только чтение.
6.2.7. Name
Возвращаемое значение: имя каталога.
Замечание: чтение и запись.
6.2.8. ParentFolder
Замечание: только чтение.
6.2.9. Path
Возвращаемое значение: полный путь к каталогу.
Замечание: только чтение.
6.2.10. ShortName
Возвращаемое значение: короткое имя каталога в формате 8.3.
Замечание: только чтение.
6.2.11. ShortPath
Возвращаемое значение: короткий путь к каталогу в формате 8.3.
Замечание: только чтение.
6.2.12. Size
Возвращаемое значение: размер всех файлов и подкаталогов, входящих в данный каталог, в байтах.
Замечание: только чтение.
6.2.13. Type
Возвращаемое значение: тип каталога. Информация, похожая на ту, которую можно увидеть в палитре свойств каталога в проводнике.
Замечание: только чтение.
6.2.14. SubFolders
Замечание: только чтение.
Создание нового подкаталога:
6.2.15. Files
Замечание: только чтение.
6.3. Методы
6.3.1. Copy
Назначение: копирует каталог в указанное место.
6.3.2. Move
Назначение: перемещает каталог в указанное место.
6.3.3. Delete
Назначение: удаляет каталог со всем содержимым.
6.3.4. CreateTextFile
7. Объект TextStream
7.1. Создание объекта
7.2. Свойства
7.2.1. AtEndOfLine
Возвращаемое значение: содержит True, если указатель достиг конца строки и False в противном случае. Работает только если файл открыт для чтения.
Замечание: только чтение.
7.2.2. AtEndOfStream
Возвращаемое значение: содержит True, если указатель достиг конца файла и False в противном случае. Работает только если файл открыт для чтения.
Замечание: только чтение.
7.2.3. Column
Возвращаемое значение: содержит номер колонки текущего символа файла.
Замечание: только чтение.
7.2.4. Line
Возвращаемое значение: содержит номер текущей строки файла.
Замечание: только чтение.
7.3. Методы
7.3.1. Close
Назначение: закрывает открытый файл.
7.3.2. Read
Назначение: считывает из файла указанное количество символов и возвращает полученную строку.
7.3.3. ReadAll
Назначение: считывает весь файл и возвращает полученную строку.
Описание: для больших файлов использование этого метода потребует больших ресурсов памяти.
7.3.4. ReadLine
Назначение: считывает строку из файла и возвращает полученную строку.
7.3.5. Skip
Назначение: пропускает при чтении файла указанное количество символов.
7.3.6. SkipLine
Назначение: пропускает при чтении файла строку.
7.3.7. Write
Назначение: записывает в файл указанную строку. Символы возврата каретки и новой строки в файл не записываются.
7.3.8. WriteLine
Назначение: записывает в файл указанную строку. В файл записываются символы возврата каретки и новой строки.
7.3.9. WriteBlankLines
Назначение: записывает в файл указанное количество пустых строк (символы возврата каретки и новой строки).
Данные функции предназначены для работы с текстовыми файлами из VBA Excel.
Используя эти функции, вы при помощи одной строки кода сможете записать текст из переменной в файл, или наоборот, загрузить содержимое текстового файла в переменную.
Чтение текстового файла в переменную:
Комментарии
Могу написать макрос под заказ (платно)
Как можно задать строки для чтения/записи из txt?
Пример:
Есть файл txt
Прораб
Вася
Петя
Работники
Саша
Андрей
Коля
Необходимо занести имена прорабов в один массив arr1(), а имена работников в другой arr2(). Изменить имена рабочих и их количество и вернуть в txt новые значения. Т.е. массивы динамические, а идентифицируем начало и конец соответствующего массива в txt по шапке в начале и пустой строке в конце.
В UTF-8 сохранять так
Function SaveTXTfile(ByVal filename As String, ByVal txt As String) As Boolean
On Error Resume Next: Err.Clear
Set stream = CreateObject("ADODB.Stream")
stream.Type = 2 'text
stream.Charset = "utf-8"
stream.Open
stream.writetext Replace(txt, Chr(10), vbNewLine)
stream.savetofile filename, 2
End Function
Добрый день!
Помогите еще в одной вещи.
По дефолту пишет в ANSI, а нужно UTF-8
Neri, замените в коде
Добрый день!
У меня есть ячейка, в которой спомощью функции сцепить собраные несколько значений и исползуется символ переноса строки
Выглядит это примерно вот так:
=СЦЕПИТЬ(R3 & СИМВОЛ(10) & S3 & СИМВОЛ(10))
"Строка 1"
"Строка 2"
Как можно записать в файл, но чтобы каждая строка писалась с новой строки?
Добрый день. А кто подскажет, какие применять команды для поиска части текста в файле (.xml), потом копировать его и этим текстом переименовывать папку или файл этот же? Спасибо.
получится что-то типа такого:
(под своим макросом, добавьте код функции ChangeFileCharset)
помогите плиииз решить задачку . у меня есть файл Эксель, мне его надо сохранить как текстовый с кодировкой Unicode, но при сохранении в этом формате програма добавляет две пустые строки, мне удалось убрать две пустые строки, но теперь он в конце первой строки ставит какой то символ, который я никак не могу убрать. где ошибка
Никто не спорит, - улучшать (дорабатывать) функцию можно бесконечно.
Чтобы нужные строки из файла брались, - кода будет в несколько раз больше.
Можете сами написать подобную функцию, взяв за основу этот код,
и сделав выборку нужный строки из массива.
Ну или заказать готовое решение.
А вопрос то актуальный. Дополнив функцию этой возможностью, её функционал стал бы гораздо качественне.
Можно с помощью Вашей функции взять только определенные строки, например со 2 по 20
Уберите строку Option Explicit - тогда не будет выскакивать ошибка Variable not defined
Пишет Variable not defined, указывая на binaryStream. Странно, ведь там все так же. :(
Mix, используйте эту функцию с третьим параметром "utf-8noBOM"
Добрый вечер!
Делаю по второму примеру, файл сохраняется в кодировке ANSI. Подскажите, как изменить данный пример чтобы сохранялось в кодировке utf-8 без BOM?
Это мое первое общение с VBA :)
Можно, конечно, и номер строки задать, откуда будут вставляться данные, - но код будет намного сложнее.
Алгоритм:
1) считываем весь текст из файла
2) разбиваем его на 2 части (по заданному номеру строки
3) формируем новый текст: 1-я часть + вставляемый текст + 2-я часть
4) записываем результат в тот же файл
Насчёт XML: очень не рекомендую использовать такой метод для XML, очень вероятны ошибки.
Там проще использовать объектную модель XML, программно добавляя новые узлы.
Очень интересна функция Добавление в текстовый файл из переменной, но так как я только начала изучать VBA, непонятно можно ли указать номер строки (в середине текста) начиная с которой начать добавление строк. И можно ли использовать эту функцию для добавления xml файл?
Здравствуйте! Подскажите пожалуйста, какой код надо написать, чтобы работал такой макрос: по нажатию кнопки выбирать папку, в которой есть текстовые файлы. В книгу вставляются листы с названиями от имени файлов в этой папке и в эти листы вводятся данные из этих файлов. Файлы содержат разную информацию: матрица, фамилии и дата рождения и т.д. Спасибо.
Anddre - если заменить "ReadTXTfile" на "txt",
то тогда функция будет всегда возвращать пустое значение. Любая Ф-я почти всегда должна содержать оператор присвоения значения переменной с именем самой функции.
Наконец я нашел решение! Спасибо огромное!
В моем случае, при сохранении TXTфайла с разделителями табуляции, нужно было записать первым пустой столбец, но любимый EXCEL сносил его и записывал файл таким образом что все столбцы смещались влево на одну позицию. запись Cells(1,1) = chr(09) приводила к возникновению цепочки сиволов кавычки-табуляция-кавычки в начале файла.
Пришлось прописывать Cells(1,1) = "?" (покрайней мере его видно в тексте), и тогда структура вроде сохранялась. Но система под которую этот файлик готовился могла на такое "нововведение" заругаться.
Как же я обрадовался когда удалось удалить из первой позиции аккруратно вырезать этот "?" и перезаписать файл в чистом виде.
Еще раз спасибо.
Спасибо за ресурс! Очень полезный. У меня несколько вопросов:
1) OpenTextFile(filename, 1, True)
второй и третий параметр этой функции что означают?
(а то редактор не выводит всплывающую подсказку)
2) Можно ли как-то считать только вторую строку текстового файла или записать во вторую строку?
3) При выведении значения в ячейку с помощью ReadTXTfile, в конце строки вместо переноса у меня стоит квадратик (нераспознанный знак), этого как-то можно избежать?
Заменить-то можно, но зачем?
Тогда придётся писать в коде дополнительную строку ReadTXTfile = txt
чтобы функция возвратила считанный из файла текст.
А так, как сейчас, всё работает без лишних строк.
(Мы намеренно записываем текст именно в ReadTXTfile, а не в какую-то текстовую переменную, поскольку функция должна возвратить загруженный текст)
Private Sub btnSave_Click(…) Handles btnSave.Click Dim filename As String Dim i As Integer filename = InputBox("Введите имя файла", "Сохранить файл") 'окно для ввода FileOpen(1, filename, OpenMode.Output) ' открываем файл для записи For i = 0 To lst.Items.Count - 1 PrintLine(1, lst.Items(i)) 'записываем в файл i-ю строку списка Next FileClose(1) End Sub
- Событие Click кнопки btnOpen («Загрузить из файла») запрограммируйте таким образом, чтобы в список помещались все строки из файла:
Private Sub btnOpen_Click(…) Handles btnOpen.Click Dim filename, CurStr As String filename = InputBox("Введите имя файла", "Загрузить файл") 'окно для ввода FileOpen(1, filename, OpenMode.Input) 'открываем файл для чтения lst.Items.Clear() While Not EOF(1) CurStr = LineInput(1) 'считываем очередную строку If CurStr <> "" Then lst.Items.Add(CurStr) 'вносим строку в список End While FileClose(1) End Sub
- Запустите приложение, внесите в список lst несколько строк и попытайтесь сохранить их в виде файла (желательно с расширением .txt: например, proba.txt). Если не написан путь к файлу, то файл сохранится в папке /bin/Debug Вашего проекта.
II. Работа с типизированными файлами
В типизированных файлах можно прочитать любую по очереди запись. Добавить новую запись в конец файла.
Задание: Хранение картотеки одинаковых по структуре карточек. Необходимо создать возможность добавления карточки и просмотра карточки по ее номеру.
Выполнение:
Разделим форму условно на две части: в первой части создадим возможность добавления карточки в картотеку, а во второй – просмотр карточки по номеру (см. рисунок):
Форма «Работа с типизированными файлами»
- Разместите на форме два элемента управления GroupBox . Установите свойство Text первой группы равным Добавление в картотеку, а второй – Просмотр картотеки.
- В группу GroupBox1 добавьте 4 элемента Label и задайте их свойствам Text значения: Имя, Фамилия, Пол, Возраст.
- В ту же группу поместите 3 элемента TextBox. Их свойствам Text задайте пустые строки. А для свойств Name укажите: для первого элемента – FirstName, второго – LastName, третьего –Age.
- Добавьте в первую группу два объекта RadioButton. Для их свойств Name укажите: для первого элемента Male, для второго –Female. Свойство Text для первого укажите – мужской, для второго – женский.
- Расположите в группе одну кнопку (button) со свойством Name равным AddButton и свойством Text равным Добавить.
- Во второй группе разместите 7 элементов типа Label и пять текстовых полей, задайте значения их свойств в соответствии с Таблицей 12:
Пояснение: чтобы дополнить некоторую строку S до длины N используется выражение: S+Space(N-Len(S)). Функция Space(K) возвращает строку, состоящую из К пробелов.
Суммарная длина записи равна 38 (15 на имя + 15 на фамилию + 1 на пол +3 на возраст)
FilePutObject(1, card, 1 + LOF(1) / 38): LOF возвращает длину файла; разделив полученное значение на размер записи (38 байт), получаем количество записей; новая запись будет иметь номер, на единицу больший.
- Теперь осталось запрограммировать кнопку Showbutton («Показать»):
Private Sub showButton_Click(…) Handles showButton.Click Dim card As String = "" FileOpen(1, "cardfile.dat", OpenMode.Random, , , 38) FileGetObject(1, card, Val(txtcardNumber.Text)) FileClose(1) txtFirstNAme.Text = Mid(card, 1, 15) txtLastName.Text = Mid(card, 16, 15) If Mid(card, 31, 1) = "м" Then txtGender.Text = "мужской" Else : txtGender.Text = "женский" End If txtAge.Text = Mid(card, 32, 3) End Sub
III. Работа с нетипизированными файлами
Нетипизированные файлы – файлы, не имеющие четкую структуру.
Задание: Перепишите программу для работы с картотекой с использованием нетипизированных файлов.
Открыть файл, разделить ячейку на 1000, сохранить файл, закрыть файл
Макрос должен запускаться, спрашивать - какой файл ему взять. Открыть его, разделить определенную.
Открыть xls файл, найти значение, скопировать в другой файл, закрыть первую
Привет. Имеются file1.xls и file2.xls. Нужно написать макрос, которая сначала открывает.
Закрыть и затем открыть один и тот же файл
Доброго времени суток помогите пожалуйста в решении задачки следующего плана. Есть файл excel В.
Как открыть текстовый файл с пом функции CreateObject
Есть файл. Путь C:\Sample\Sample.txt. Хотелось бы открыть его с пом функции CreateObject в файле.
убрал, не открывает
кириллица не помеха?
Добавлено через 4 минуты
странно почему не указываю с плюсами
Shell("notepad++.exe" ведь они есть в наличии
вот так у меня выглядит сейчас код, видимо кириллица нормально ему заходит,
открывает, ждёт, закрывает
Добавлено через 8 минут
вот так тоже работает, значит дело только в пробелах в пути к текстовому файлу.
Добавлено через 5 минут
Ципихович Эндрю, ошбика File not found или в самом болокноте ошибка текстовый файл не найден?
на строке AppActivate ProcID
Invalid procedure call or argument Ципихович Эндрю, файл успешно открылся в блокноте++?
что в окне Locals ? у меня вот так: оказывается ошибкой было, то что я пробовал с открытым нужным документом, тогда актуально
как закрыть текстовый файл, как будто я это сделал физически
то есть в открытом Блокнотом++ нажал кнопку Закрыть? увы этого не происходит, я делаю следующее
есть текстовый файл, я его читаю
Ципихович Эндрю, так может вы приложите весь код макроса?
а то изначально условия задания были другие, и для них решение найдено. у меня файл открывается в нужной программе и закрывается.
Вроде опытный пользователь форума.
Добавлено через 15 минут
перед закрытием файла тогда нужно сохранить его
правильно добавил, не работает, код:
Ципихович Эндрю, а что он должен делать?
в строках с 8 по 10 вы открываете файл в блокноте и ту же его закрываете, зачем?
в строке 28 посылаете комбинацию Ctrl+S только не понятно кому. судя по всему экселю, так как он будет активным приложением в этот момент(мне так кажется)
в строках с 12 по 26 вы открываете файл, читаете его, и это же самое записываете в него. в чём суть?
как ни странно у меня ваш макрос работает нормально, только не понятно для чего он нужен, открываем, не изменяя закрываем, читаем и записываем одно и тоже. какой нужен результат.
макрос работает но приходит к тому с чего начал, так как это и написано в коде
Читайте также: