Очистить содержимое файла vba

Обновлено: 07.07.2024

Данные функции предназначены для работы с текстовыми файлами из 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, а не в какую-то текстовую переменную, поскольку функция должна возвратить загруженный текст)


Работая в Excel, мы сталкиваемся с моментом, когда нам нужно удалить данные, уже присутствующие в ячейке или в диапазоне ячеек, для выполнения другой функции или любой другой команды. Это делается вручную, если мы работаем на рабочем листе. Но если мы работаем в VBA, мы используем метод очистки содержимого для очистки данных или значений, присутствующих в ячейках.

Очистить содержимое - это функция диапазона в Excel, которая используется для очистки содержимого в заданном диапазоне ячеек или группе ячеек. Очистка данных и очистка ячеек - это разные вещи, которые мы должны помнить. С четким содержимым мы очищаем только данные, представленные в ячейке. Чистое содержимое не влияет на форматирование или условное форматирование ячеек. Это делается с помощью другой функции.

Чтобы очистить содержимое, нам нужно выбрать диапазон ячеек, которые мы хотим очистить, и как только мы определили ячейки, мы можем использовать метод очистки содержимого, чтобы очистить данные, представленные в листе Excel. Синтаксис для использования метода чистого содержимого в VBA выглядит следующим образом:

В диапазоне ячеек мы предоставляем диапазон ячеек, который мы хотим очистить.

Давайте использовать эту функцию в нескольких примерах, которые сделают ее более понятной для нас. Для демонстрации у меня есть данные в разных листах.

Примечание. Чтобы использовать VBA в Excel, убедитесь, что у нас включена вкладка разработчика на вкладке «Файлы» в разделе параметров.

Примеры Excel VBA Очистить содержимое

Ниже приведены несколько практических примеров содержания VBA Clear в Excel.

Вы можете скачать этот шаблон Excel VBA Clear Contents здесь - Шаблон VBA Clear Contents Excel

Excel VBA Clear Contents - Пример № 1

На листе 1 у меня есть некоторые данные в ячейке A1. Посмотрите на это ниже.


Мы будем использовать метод очистки содержимого для очистки данных из ячейки A1. Выполните следующие шаги, чтобы очистить содержимое ячейки с помощью кода VBA.

Шаг 1: Перейдите на вкладку разработчика и нажмите на Visual Basic, чтобы открыть VB Editor.


Шаг 2: Он откроет VB Editor для нас. Нажмите на вкладку Вставить, чтобы вставить новый модуль.


Шаг 3: Запустите код VBA подфункцией.

Код:


Шаг 4: Чтобы использовать любые свойства рабочего листа, нам нужно сначала активировать рабочий лист. Активируйте лист с помощью следующего кода.

Код:


Шаг 5: Теперь используйте функцию Очистить содержимое, чтобы очистить данные в ячейке A1 с помощью следующего кода.

Код:


Шаг 6: Запустите приведенный выше код с помощью кнопки запуска или нажмите F5.

Запустив код, мы можем увидеть результат ячейки A1 на листе 1, что данные пропали.

Excel VBA Очистить содержимое - Пример № 2

В приведенном выше примере мы очистили содержимое одной ячейки, но у нас есть данные в диапазоне ячеек. Будет ли эта функция работать? Мы узнаем то же самое в этом примере. У меня есть данные в листе 2 следующим образом.


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

Шаг 1: В окне кода объявите подфункцию для написания кода.

Код:


Шаг 2: Чтобы использовать свойства листа 2, всегда не забывайте активировать лист с помощью следующего кода.

Код:


Шаг 3: Мы знаем, что у нас есть данные в диапазоне ячеек A1: C3 на листе 2. Мы будем использовать функцию очистки содержимого, чтобы очистить содержимое этого диапазона ячеек.

Код:


Шаг 4: Запустите приведенный выше код с помощью кнопки запуска или нажмите F5, чтобы получить следующий результат.

Мы видим, что данные из диапазона ячеек A1: C3 были очищены.

Excel VBA Очистить содержимое - Пример № 3

Мы обсудили форматирование ранее в статье. Очистить содержимое также очистить форматирование ячеек с содержимым? Мы увидим это в этом примере. Для демонстрации у меня есть данные на листе 3 светло-голубого цвета. Посмотрите на это ниже,


Выполните следующие шаги, чтобы очистить содержимое ячейки с помощью кода VBA.

Шаг 1: Запустите код, объявив подфункцию.

Код:


Шаг 2: Мы знаем, что для использования свойств листа 3 мы должны активировать лист с помощью следующего кода.

Код:


Шаг 3: Мы знаем, что у нас есть данные в диапазоне ячеек A1: C3 на листе 3. Мы будем использовать функцию очистки содержимого, чтобы очистить содержимое этого диапазона ячеек.

Код:


Шаг 4: Запустите приведенный выше код с помощью кнопки запуска или нажмите F5, чтобы получить следующий результат.

Мы можем видеть, что данные из диапазона ячеек A1: C3 были очищены, но формат ячеек остается неизменным.

Excel VBA Очистить содержимое - Пример № 4

В этом примере у нас есть некоторые данные на листе 4, данные выделены жирным шрифтом и курсивом. Как только мы очистим содержимое, мы снова поместим некоторые данные в эти ячейки, чтобы увидеть, присутствует ли форматирование или нет. Посмотрите на данные ниже: ячейка A1 выделена жирным шрифтом, а ячейка B1 выделена курсивом.


Выполните следующие шаги, чтобы очистить содержимое ячейки с помощью кода VBA.

Шаг 1: Запустите код, объявив подфункцию.

Код:


Шаг 2: Мы знаем, что для использования свойств листа 4 мы должны активировать лист с помощью следующего кода.

Код:


Шаг 3: Мы знаем, что у нас есть данные в диапазоне ячеек A1: B1 на листе 4. Мы будем использовать функцию очистки содержимого, чтобы очистить содержимое этого диапазона ячеек.

Код:


Шаг 4: Запустите приведенный выше код с помощью кнопки запуска или нажмите F5, чтобы получить следующий результат.

Теперь попробуйте снова ввести несколько случайных значений в ячейки A1 и B1, чтобы проверить, не изменилось ли форматирование.


Мы можем видеть, что мы только очистили содержимое, пока форматирование все еще там.

То, что нужно запомнить

  • VBA Clear Contents может удалять данные из ячейки или заданного диапазона ячеек.
  • Очистить содержимое только удаляет данные из ячеек, это не влияет на форматирование ячеек.
  • Даже если данные имеют условное форматирование, чистое содержимое не очищает форматирование ячеек.

Рекомендуемые статьи

Это руководство по VBA Clear Contents. Здесь мы обсуждаем примеры для очистки содержимого ячейки с использованием кода Excel VBA, а также практические примеры и загружаемый шаблон Excel. Вы также можете просмотреть наши другие предлагаемые статьи -

Предположим, что ежедневно во временную папку поступают файлы отчетов от филиалов. Они могут собираться из почты кодом вроде такого: Сохранить вложения из Outlook в указанную папку или добавляться в папку иными средствами. Далее Вы собираете данные из этих файлов неким кодом(вроде этого - Как собрать данные с нескольких листов или книг?). Но с каждым днем файлов все больше и больше и приходится заходить в папку и руками чистить её от лишних файлов, чтобы при сборе данных не приходилось каждый раз искать и отбирать только новые файлы.
Если надо удалять только конкретные файлы(например только файлы Excel, содержащие в имени слово "отчет"), то можно использовать такой код:

Чтобы удалять полностью все файлы в папке(а не только файлы Excel), а саму папку оставить, то строку sFiles = Dir(sFolder & "*отчет*.xls*") надо записать так: sFiles = Dir(sFolder & "*")

Если необходимо удалять файлы по дате создания/изменения(например, только файлы, созданные раньше 01.03.2017), то можно использовать такой код:

Если необходимо всегда удалять файлы, дата создания которых раньше текущей, то строку dKill = CDate("01.03.2017") нужно заменить на такую: dKill = Date . Если удалить надо файлы недельной давности, то: dKill = Date-7

Если же необходимо удалить папку полностью, а не только файлы в ней, то лучше использовать такой код:

Sub RemoveFolderWithContent() Dim sFolder As String, sFiles As String 'диалог запроса выбора папки на удаление With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator) 'путь к папке можно задать статично, если он заранее известен и не изменяется ' sFolder = "C:\temp\Ежедневные отчеты\10072017" 'путь к папке, которую надо удалить Shell "cmd /c rd /S/Q """ & sFolder & """" End Sub

Этот код удалить папку вместе со всеми файлами буквально за секунду.
Вообще в VBA есть специальная команда для удаления директорий(папок) RmDir . Но она способна удалить только пустую папку, поэтому редко когда можно найти её практическое применение. Если в файле есть хоть один файл то команда RmDir выдаст ошибку '75' - File/Path access error .

Непосредственно для работы с текстовыми файлами в пространстве System.IO предназначены специальные классы StreamReader и StreamWriter .

Чтение из файла и StreamReader

Класс StreamReader позволяет читать из текстового файла весь текст или отдельные строки. Рассмотрим основные его методы:

Метод Close закрывает файл и освобождает поток

Метод Peek возвращает следующий доступный символ, если символов больше нет, то возвращает -1

Метод Read считывает и возвращает следующий символ в численном представлении. Имеет перегруженную версию: Read(array As Char(), index As Integer, count As Integer) , где array - массив, куда считываются символы, index - индекс в массиве array, начиная с которого записываются считываемые символы, и count - максимальное количество считываемых символов

Метод ReadLine считывает одну строку из файла

Метод ReadToEnd считывает из файла весь текст

Считаем текст из файла различными способами:

Как и в случае с классом FileStream здесь используется конструкция Using .

В первом случае мы разом считываем весь текст с помощью метода ReadToEnd() .

Во втором случае в цикле While считываем построчно. Когда объект reader дойдет до конца файла и больше строк не останется, то метод reade.ReadLine() вернет значение Nothing.

В третьем случае считываем в массив четыре символа.

Обратите внимание, что в последних двух случаях в конструкторе StreamReader указывалась кодировка System.Text.Encoding.UTF8 . Если нам известна кодировка файла, то мы можем ее указать при чтении файла. Также через другие свойства мы можем указать другие кодировки. Если кодировка не указана, то по умолчанию при чтении используется UTF8 . Иногда важно указывать кодировку, так как она может отличаться от UTF8, и тогда мы получим некорректный вывод.

Запись в файл и StreamWriter

Для записи в текстовый файл применяется класс StreamWriter . Его основные методы:

Close : закрывает записываемый файл и освобождает все ресурсы

Flush : записывает в файл оставшиеся в буфере данные и очищает буфер.

Write : записывает в файл данные простейших типов, как Integer, Double и т.д.

WriteLine : записывает в файл строку

Посмотрим на использование класса StreamWriter на примере:

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

Класс StreamWriter имеет несколько конструкторов. Здесь мы использовали два из них: New StreamWriter(writePath, False) . В качестве первого параметра передается путь к записываемому файлу. Второй параметр представляет булевую переменную, которая определяет, будет файл дозаписываться или перезаписываться. Если этот параметр равен True , то новые данные добавляются в конце к уже имеющимся данным. Если False , то предыдущее содержимое стирается, и файл перезаписывается. И если в первом случае файл перезаписывается, то во втором делается дозапись в конец файла.

Читайте также: