Vba excel создать файл: Создание текстовых файлов по таблице Excel
Создание текстовых файлов по таблице Excel
Макрос предназначен для создания текстовых файлов в кодировке UTF-8.
Исходными данными является таблица Excel из 12 столбцов.
Сначала, макрос создаёт папку для будущих текстовых файлов.
Папка создаётся в том же каталоге, где расположена книга Excel.
Далее, для каждой строки таблицы, макрос формирует подпапку,
используя в качестве её названия текст из 7-го столбца таблицы.
И потом, когда папка для файла создана, макрос создаёт текстовый файл с содержимым из 10 столбца таблицы,
и сохраняет его под именем, взятым из второго столбца той же таблицы Excel.
После создания файла, у него меняется кодировка на UTF-8 (изначально, при создании, файлы имеют кодировку Unicode)
По окончании работы макроса, открывается папка, содержащая созданные текстовые файлы.
Пример макроса смотрите в прикреплённом файле.
Код макроса, создающего папки, подпапки, и текстовые файлы по данным из таблицы Excel:
Sub СозданиеТекстовыхФайлов() On Error Resume Next Dim cell As Range, ra As Range Set ra = Range([A2], Range("A" & Rows.Count).End(xlUp)).Resize(, 11) arr = ra.Value ' считываем данные в массив Set FSO = CreateObject("scripting.filesystemobject") ' создаём главную папку BaseFolder$ = ThisWorkbook.Path & "\Товар по группам\": MkDir BaseFolder$ ' перебираем все строки For i = LBound(arr) To UBound(arr) ' создаём папку для очередной строки (если папки ещё нет) Folder$ = BaseFolder$ & arr(i, 7) & "\" ' имя папки - в столбце G MkDir Folder$ ' формируем имя создаваемого текстового файла Filename$ = Folder$ & Trim(arr(i, 2)) & ".txt" ' создаём файл в кодировке Unicode Set ts = FSO.CreateTextFile(Filename$, True, True) ts.Write Trim(arr(i, 10)) ' данные в файл - из ячейки 10-го столбца ts.Close ' если текстовый файл нужен в другой кодировке ChangeFileCharset Filename$, "utf-8" Next i Set ts = Nothing: Set FSO = Nothing MsgBox "Файлы созданы, и помещены в папку" & vbNewLine & BaseFolder$, vbInformation, "Готово" ' открываем папку с файлами CreateObject("wscript.shell").Run "explorer.exe /e, """ & BaseFolder$ & """" End Sub
VBA Excel. Создание и открытие документов Word
Создание нового документа Word или открытие существующего из кода VBA Excel. Методы Documents.Add и Documents.Open. Сохранение и закрытие документа.
Работа с Word из кода VBA Excel
Часть 2. Создание и открытие документов Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5]
Создание нового документа Word
Новый документ Word создается из кода VBA Excel с помощью метода Documents.Add:
Sub Test1() Dim myWord As New Word.Application Dim myDocument As Word.Document Set myDocument = myWord.Documents.Add myWord.Visible = True End Sub |
Переменную myDocument можно объявить с типом Object, но тогда не будет ранней привязки к типу Word.Document и подсказок при написании кода (Auto List Members).
Открытие существующего документа
Существующий документ Word открывается из кода VBA Excel с помощью метода Documents.Open:
Sub Test2() Dim myWord As New Word.Application Dim myDocument As Word.Document Set myDocument = _ myWord.Documents.Open(«C:\Документ1.docx») myWord.Visible = True End Sub |
Замените в этой процедуре строку “C:\Документ1.docx” на адрес своего файла.
Сохранение и закрытие документа
Сохранение нового документа
Чтобы сохранить из кода VBA Excel новый документ Word, используйте метод SaveAs объекта Document:
myDocument.SaveAs («C:\Документ2.docx») |
Замените “C:\Документ2.docx” на путь к нужному каталогу с именем файла, под которым вы хотите сохранить новый документ.
Сохранение изменений в открытом документа
Сохраняйте изменения в существующем документе с помощью метода Document.Save или параметра SaveChanges метода Document.Close:
‘Сохранение изменений документа myDocument.Save ‘Сохранение изменений документа ‘при закрытии myDocument.Close ‘по умолчанию True myDocument.Close True myDocument.Close wdSaveChanges ‘Закрытие документа без ‘сохранения изменений myDocument.Close False myDocument.Close wdDoNotSaveChanges |
Закрытие любого сохраненного документа
Метод Document.Close закрывает документ, но не приложение. Если работа с приложением закончена, оно закрывается с помощью метода Application.Quit.
Программы и макросы Excel в категории Создание файлов
Надстройка FillDocuments для MS Excel: общие сведения
Предназначение программы: заполнение множества документов данными из Excel нажатием одной кнопки.
Для работы программы требуется таблица Excel с данными для подстановки, и папка с шаблоном (шаблонами) документов.
В качестве шаблонов можно использовать файлы Word и Excel.
На выходе получаются заполненные файлы исходного…
Надстройка Parser для Excel — простое и удобное решение для парсинга любых сайтов (интернет-магазинов, соцсетей, площадок объявлений) с выводом данных в таблицу Excel (формата XLS* или CSV), а также скачивания файлов.
Особенность программы — очень гибкая настройка постобработки полученных данных (множество текстовых функций, всевозможные фильтры, перекодировки, работа с переменными,…
Макрос предназначен для программного создания документов Word на основе шаблона
(без использования функции слияния в Word)
В прикреплённом к статье архиве находятся 2 файла:
шаблон договора в формате Microsoft Word (расширение .dot)
файл Excel с макросом
Настройки макроса задаются в коде:
Const ИмяФайлаШаблона = «шаблон.dot»
Const КоличествоОбрабатываемыхСтолбцов = 8…
Данный макрос позволяет упростить процедуру сохранения активного листа в книге Excel в отдельный файл.
Для использования этого макроса на любом листе в книге Excel создайте кнопку, и назначьте ей макрос СохранитьЛистВФайл.
При запуске макроса (нажатии кнопки) будет выведено диалоговое окно выбора имени для сохраняемого файла, после чего текущий лист будет сохранён под заданным именем в…
Программа предназначена для формирования (заполнения) договоров купли-продажи.
Исходными данными выступает таблица сделок, и шаблон договора, в который при помощи формул подставляются значения из заданной строки таблицы сделок.
Для запуска программы достаточно нажать зеленую кнопку — и сразу же начнётся формирование договоров (файлов Excel из одного листа) в автоматически созданной папке…
Надстройка позволяет экспортировать все изображения с листа Excel в графические файлы.
Доступен выбор типа создаваемых файлов (поддерживаются форматы JPG, GIF и PNG)
Кроме того, можно указать имя папки, в которую будут помещены созданные файлы
(эта папка будет создана автоматически в том же каталоге, где расположен обрабатываемая книга Excel)
Если нужно сохранять картинки под именами из…
К примеру, есть у вас несколько десятков (или сотен) текстовых файлов с подобным содержимым:
(количество файлов, и количество строк данных в каждом файле не ограничено)
1c04;1J0-698-151-G;1 комплект тормозных накладок;1J0698151G;1J0698151G;5;1
1c04;1H0698151A;Тормозные колодки;1H0698151A;1H0698151A;1;1
1c04;1K0-698-151-B;Тормозные колодки;1K0698151B;1K0698151B;2;1
А надо из всего этого…
Можно ли прикрепить (вложить) произвольные файлы в обычную книгу Excel?
А потом извлечь эти файлы в заданную папку, и работать с ними?
Казалось бы, Excel такого не позволяет. (а если и позволяет, то извлечь вложенные файлы без из запуска — весьма проблематично)
Но, при помощи макросов, можно реализовать что угодно (и сохранение\извлечение файлов в том числе)
Теперь прикрепить к книге Excel…
Программа предназначена для автоматизации формирования договоров комиссии и купли автотранспортного средства.
В качестве исходных данных выступают:
таблица Excel с реквизитами создаваемых документов
папка с шаблонами договоров (в формате dot)
В исходной таблице Excel занесены все необходимые исходные данные для заполнения бланков договоров, а также, при помощи пользовательских формул (UDF),…
Программа предназначена для работы с заказами, оформляемыми менеджерами на выставках.
Основные функции программы:
создание (заполнение) новых заказов
редактирование существующих заказов
объединение нескольких заказов в один
формирование заявки на продукцию на основании данных их сформированных заказов
Для каждого заказа предусмотрен выбор клиента из базы данных (если клиент…
Программа предназначена для формирования прайс-листов на ноутбуки с соответствии с требованиями интернет-каталога Onliner.by
Основные функции программы:
(учитываются цены фирм-конкурентов, цены onliner.by и надбавка фирмы)
загрузка каталога ноутбуков (названия, характеристики, цены) с сайта onliner.by в файл Excel, и обновление этого каталога
назначение соответствий моделей…
Программный комплекс, предназначенный для автоматизации учёта и администрирования сети связи телефонной или телекоммуникационной компании.
Программа позволяет хранить и редактировать базу данных объектов (в виде файлов Excel), просматривать существующие трассы и формировать новые.
Особенность программы — возможность учёта и администрирования узлов связи с нестандартными…
Данный макрос позволяет быстро (одним нажатием кнопки) пересохранить текущий файл Excel в другом формате.
Например, вы работаете с книгой Excel в формате Excel 97-2003 (расширение XLS), и вам понадобилось преобразовать этот файл в формат «двоичная книга Excel» (расширение XLSB)
Для чего это нужно? К примеру, файлы в формате XLSB занимают намного меньше места на диске, и не…
Функция предназначена для разбивки текстового файла на несколько файлов меньшего размера — в каждом из которых будет не более заданнного количества строк
Разделитель строк (обычно это перевод строки — константа vbNewLine) задаётся в качестве параметра функции Delimiter$
Создаваемые файлы получают имена вида filename(1).txt, filename(2).txt и т.д.
Если задан параметр функции…
Программа предназначена для формирования заданий на производство.
Исходными данными выступают таблицы Excel и файлы XML.
При конвертации таблиц происходит обработка данных и перестановка столбцов.
При запуске программа формирует панель инструментов с 6 кнопками — для обработки файлов различной структуры.
Макрос для архивации текущей (или активной) книги Excel средствами Windows
(без использования сторонних программ-архиваторов)
Во вложении — файл, при запуске которого автоматически срабатывает такой макрос
При открытии этого файла, если включены макросы, в папке My Program Backups будет сохранена копия книги в формате ZIP (архив)
Папка, если таковая не существует, будет автоматически создана…
В некоторых случаях, при запуске файла Excel с макросами (к примеру, надстройки Excel), для обеспечения работы макросов требуется, чтобы был полный доступ к файлу (а не «только чтение»), или же файл был сохранён в заданной папке.
Полный доступ к файлу необходим, например, для работы автоматического обновления надстройки,
а постоянный путь может потребоваться, если вы хотите…
Надстройка SplitFile позволяет создать из одного файла Excel несколько файлов, с заданным ограничением по количеству строк.
Обычно разбивка файла (формата XLSX или CSV) требуется для загрузки данных в интернет-магазин, когда в загружаемом файле много строк (десятки тысяч),
а движок интернет магазина не поддерживает большие файлы (или зависает из-за большого объема данных)
В настройках программы…
Клавиша:
Ctrl + T
Макрос:
Создание Текстовых Файлов
Клавиша:
Ctrl + 4
Макрос:
Окраска Объединённых Ячеек
Клавиша:
Ctrl + 5
Макрос:
Окраска Всех Объединённых Ячеек
Клавиша:
Ctrl + G
Макрос:
Объединение Значений Из Ячеек
Клавиша:
Ctrl + Shift + G
Макрос:
Разъединение Значений Из Ячеек
Клавиша:
Ctrl + Shift + D
Макрос:
Поиск Дубликатов В Книге
Клавиша:
Ctrl + Shift + O
Макрос:…
Данная функция формирует (создаёт) новую книгу Excel с одним листом (на основании шаблона — листа sh_template), после чего сохраняет новый файл по пути NewFilename$
Если путь не указан, сохранения нового файла не происходит.
Function NewWorksheet(ByRef sh_template As Worksheet, Optional ByVal NewFilename$) As Worksheet
Application.ScreenUpdating = False: On Error Resume Next: Err.Clear…
Программа предназначена для автоматизации рабочего места сотрудника, отвечающего за регистрацию, прием на работу, и увольнение иностранных граждан.
В качестве исходных данных используется таблица изображенная на скриншоте.
В этой таблице содержится нужная информация, необходимая для заполнения шаблонов документов.
Программа заполняет следующие документы:
Доверенность (doc)
Заявление на…
Программа представляет собой калькулятор стоимости быстровозводимых зданий, с возможностью создания прайс-листа для разных значений длины, ширины и высоты здания.
В качестве исходных данных для создаваемого прайс-листа, задаются начальные и конечные значения таких параметров, как ширина, длина и высота здания, а также шаг изменения каждого из параметров:
Для каждого значения из…
Программа предназначена для обработки отчётов управления по сделкам с ценными бумагами
Основные функции программы:
Создание новых отчётов управления (за следующий квартал) на основании текущих отчётов
Внесение изменений и дополнений в существующие отчёты
Формирование сводной таблицы по вкладам для оценки роста, а также коэффициентов ликвидности и версификации вкладов
Обработка…
Программа предназначена для создания отчётов по детализации телефонных звонков (междугородная и международная связь), последующей упаковки созданных детализаций в ZIP архив, и автоматизированной рассылки сформированных писем абонентам.
При запуске программа ищет в заданной папке исходные файлы с детализацией (упакованные в ZIP файлы DBF), и на основании из этих файлов формирует (по шаблону, с…
Программа формирует выгрузку в CSV для выделенных строк таблицы Excel
Есть возможность одним нажатием выделить все строки в таблице (или снять выделение со всех строк)
Реализована возможность разбиения итогового файла CSV на несколько, с заданным максимальным количеством строк.
(создаваемые файлы автоматически нумеруются)
Программа предназначена для еженедельного формирования плана проверок торговых точек.
Функции программы:
выборка из базы данных заданного числа случайных торговых точек, в соответствии с настройками для каждой группы
формирование таблицы (файл Excel) со списком выбранных объектов по шаблону
рассылка созданного файла (в архиве ZIP) по заданному списку адресов электронной…
Функция предназначена для сохранения двумерного массива в файл формата XLS
Sub SaveArray(ByVal Arr, ByVal ColumnNames, ByVal DocName$)
‘ Получает двумерный массив Arr с данными, и массив заголовков столбцов ColumnNames.
‘ Создаёт новый файл в подпапке СФОРМИРОВАННЫЕ ДОКУМЕНТЫ с именем DocName$
On Error Resume Next
‘ создаём подпапку (там же, где текущий файл Excel)…
VBA Excel. Операторы чтения и записи в файл
Чтение и запись в файл, открытый с помощью оператора Open. Операторы Input, Line Input, Write и функция EOF. Примеры использования в VBA Excel.
Операторы чтения и записи в файл
Оператор Input #
Оператор Input # считывает данные из открытого файла с последовательным доступом и присваивает эти данные переменным.
Оператор Input # используется только с файлами, открытыми в режиме Input или Binary. При прочтении стандартные строковые или числовые значения присваиваются переменным без изменения.
Синтаксис оператора Input #:
Input #Номер_файла, Переменные |
Компоненты оператора Input #:
- Номер_файла – обязательный параметр, представляющий из себя номер, присвоенный файлу при открытии с помощью оператора Open.
- Переменные – обязательный параметр, представляющий из себя список переменных, разделенных запятой, которым присваиваются значения, считанные из файла.
Особенности применения оператора Input #:
- Элементы данных в файле должны быть указаны в том же порядке, что и переменные в списке Переменные, и соответствовать им по типу данных. Если переменная числовая, а данные текстовые, этой переменной будет присвоено нулевое значение.
- Если при чтении данных достигнут конец файла, чтение прерывается и возникает ошибка. Для ее предупреждения в коде VBA Excel используется функция EOF.
- Чтобы данные из файла могли быть правильно прочитаны и записаны в переменные с помощью оператора Input #, они должны быть записаны в файл с помощью оператора Write #. Он обеспечивает правильное разделение каждого из полей (элементов) данных.
Оператор Line Input #
Оператор Line Input # считывает одну строку из открытого файла с последовательным доступом и присваивает ее значение строковой переменной.
Оператор Line Input # считывает из файла по одному символу до тех пор, пока не встретится символ возврата каретки (Chr(13)) или последовательность символа возврата каретки и перевода строки (Chr (13) + Chr(10)).
Синтаксис оператора Line Input #:
Line Input #Номер_файла, Переменная |
Компоненты оператора Line Input #:
- Номер_файла – обязательный параметр, представляющий из себя номер, присвоенный файлу при открытии с помощью оператора Open.
- Переменная – обязательный параметр, представляющий из себя имя переменной, объявленной как String или Variant, которой присваивается строка, считанная из файла.
Оператор Write #
Оператор Write # записывает данные в файл с последовательным доступом.
Синтаксис оператора Write #:
Write #Номер_файла, [Данные] |
Компоненты оператора Write #:
- Номер_файла – обязательный параметр, представляющий из себя номер, присвоенный файлу при открытии с помощью оператора Open.
- Данные – необязательный параметр, представляющий из себя одно или несколько числовых или строковых выражений, разделенных запятой, которые нужно записать в файл.
Особенности применения оператора Write #:
- Данные, записанные с помощью оператора Write #, считываются из файла с помощью оператора Input #.
- Если опустить параметр Данные и добавить запятую после Номер_файла, в файл будет добавлена пустая строка.
- Несколько выражений в списке Данные могут быть разделены точкой с запятой или запятой.
- Числовые данные всегда записываются с точкой в качестве разделителя целой и дробной части.
- Оператор Write # вставляет запятые между элементами и прямые парные кавычки вокруг строк при их записи в файл.
- После записи в файл последнего символа из параметра Данные оператор Write # вставляет символы возврата каретки и перевода строки (Chr (13) + Chr(10)).
Функция EOF
Функция EOF возвращает логическое значение True, когда достигнут конец файла, открытого для последовательного (Input) или произвольного (Random) доступа.
Синтаксис функции EOF:
EOF (Номер_файла) |
Номер_файла – это номер, присвоенный файлу при открытии с помощью оператора Open.
Функция EOF используется для предупреждения ошибок, вызываемых попытками выполнить чтение после конца файла. Она возвращает значение False, пока не будет достигнут конец файла.
Примеры чтения и записи в файл
Пример 1
Открытие (или создание, если он не существует) текстового файла для чтения и записи и запись в него одной строки, состоящей из двух текстовых и одного числового значений. Файл с именем myFile1.txt будет создан в той же папке, где расположен файл Excel с кодом VBA.
Sub Test1() Dim ff As Integer, ws As Object ‘Получаем свободный номер для открываемого файла ff = FreeFile ‘Открываем (или создаем) файл для чтения и записи Open ThisWorkbook.Path & «\myFile1.txt» For Output As ff ‘Записываем в файл одну строку Write #ff, «Дает корова молоко!», _ «Куда идет король?», 25.35847 ‘Закрываем файл Close ff ‘Открываем файл для просмотра Set ws = CreateObject(«WScript.Shell») ws.Run ThisWorkbook.Path & «\myFile1.txt» Set ws = Nothing End Sub |
Строки и число можно предварительно присвоить переменным, объявленным с соответствующими типами данных, и использовать их для записи данных в файл (в строках кода с оператором Write #, как в этом и следующем примерах).
Пример 2
Открытие (или создание, если он не существует) файла без расширения для чтения и записи и запись в него трех строк: двух текстовых и одной в числовом формате. Файл с именем myFile2 будет создан в той же папке, где расположен файл Excel с кодом VBA.
Так как у файла нет расширения, Windows выведет диалоговое окно для выбора открывающей его программы. Выберите любой текстовый редактор или интернет-браузер.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Sub Test2() Dim ff As Integer, ws As Object ‘Получаем свободный номер для открываемого файла ff = FreeFile ‘Открываем (или создаем) файл для чтения и записи Open ThisWorkbook.Path & «\myFile2» For Output As ff ‘Записываем в файл три строки Write #ff, «Дает корова молоко!» Write #ff, «Куда идет король?» Write #ff, 25.35847 ‘Закрываем файл Close ff ‘Открываем файл для просмотра Set ws = CreateObject(«WScript.Shell») ws.Run ThisWorkbook.Path & «\myFile2» Set ws = Nothing End Sub |
Пример 3
Считываем строку, разделенную на отдельные элементы, из файла myFile1.txt и записываем в три переменные, по типу данных соответствующие элементам.
Sub Test3() Dim ff As Integer, str1 As String, _ str2 As String, num1 As Single ‘Получаем свободный номер для открываемого файла ff = FreeFile ‘Открываем файл myFile1.txt для чтения Open ThisWorkbook.Path & «\myFile1.txt» For Input As ff ‘Считываем строку из файла и записываем в переменные Input #ff, str1, str2, num1 Close ff ‘Смотрим, что записалось в переменные MsgBox «str1 = » & str1 & vbNewLine _ & «str2 = » & str2 & vbNewLine _ & «num1 = » & num1 End Sub |
Попробуйте заменить в этом примере строку Input #ff, str1, str2, num1
сначала на строку Input #ff, str1
, затем на строку Line Input #ff, str1
, чтобы наглядно увидеть разницу между операторами Input # и Line Input #.
В следующих примерах (4 и 5) замена оператора Input # на Line Input # не приведет ни к каким изменениям, так как данные в строках файла myFile2 не разделены на элементы (поля).
Пример 4
Считываем поочередно три строки из файла myFile2 и записываем в три элемента массива, объявленного как Variant, так как в этот файл ранее были записаны две строки с текстом и одна с числом.
Sub Test4() Dim ff As Integer, a(2) As Variant, i As Byte ‘Получаем свободный номер для открываемого файла ff = FreeFile ‘Открываем файл myFile2 для чтения Open ThisWorkbook.Path & «\myFile2» For Input As ff ‘Считываем строки из файла и записываем в элементы массива For i = 0 To 2 Input #ff, a(i) Next Close ff ‘Смотрим, что записалось в элементы массива MsgBox «a(0) = » & a(0) & vbNewLine _ & «a(1) = » & a(1) & vbNewLine _ & «a(2) = » & a(2) End Sub |
Пример 5
Считываем с помощью цикла Do While… Loop все строки из файла myFile2 и записываем построчно в переменную, объявленную как String (число из третьей строки запишется как текст). Для остановки цикла при достижении конца файла используем функцию EOF.
Sub Test5() Dim ff As Integer, a As Variant, b As String ‘Получаем свободный номер для открываемого файла ff = FreeFile ‘Открываем файл myFile2 для чтения Open ThisWorkbook.Path & «\myFile2» For Input As ff ‘Считываем строки из файла и записываем в элементы массива Do While Not EOF(ff) Input #ff, a b = b & a & vbNewLine Loop Close ff ‘Смотрим, что записалось в переменную MsgBox b End Sub |
Предыдущая часть темы об открытии файла для ввода и вывода информации опубликована в статье: Оператор Open (синтаксис, параметры). Смотрите также связанную статью: Функция FreeFile.
Смотрите, как создавать и открывать текстовые файлы с помощью методов CreateTextFile и OpenTextFile. Чтение файла, запись и добавление информации с помощью объекта TextStream.
VBA Excel. Создание, копирование, перемещение папок
Создание, копирование, перемещение и удаление папок в VBA Excel методами объекта FileSystemObject. Удаление папок с помощью оператора RmDir.
Создание папки (метод CreateFolder)
CreateFolder – это метод объекта FileSystemObject, предназначенный для создания новой папки.
Синтаксис
object.CreateFolder (foldername) |
Параметр foldername
можно в скобки не заключать.
Параметры
Параметр | Описание |
---|---|
object | Переменная, возвращающая объект FileSystemObject. |
foldername | Строковое выражение, указывающее папку, которую необходимо создать. |
Если папка, указанная параметром foldername
уже существует, произойдет ошибка.
Копирование папки (метод CopyFolder)
CopyFolder – это метод объекта FileSystemObject, предназначенный для копирования папки из одного расположения в другое.
Синтаксис
object.CopyFolder source, destination, [overwrite] |
Параметры
Параметр | Описание |
---|---|
object | Переменная, возвращающая объект FileSystemObject. |
source | Строковое выражение, указывающее папку, которую требуется скопировать в другое расположение. Для копирования нескольких папок используются подстановочные знаки. |
destination | Строковое выражение, задающее конечное расположение, куда требуется скопировать папку (папки) со всеми вложениями из элемента source. Подстановочные знаки не допускаются. |
overwrite | Логическое значение, которое указывает, требуется ли перезаписывать существующие папки и файлы в конечном расположении. True – папки и файлы будут перезаписаны, False – перезапись не выполняется. Необязательный параметр. По умолчанию – True. |
Перемещение папки (метод MoveFolder)
MoveFolder – это метод объекта FileSystemObject, предназначенный для перемещения папки из одного расположения в другое.
Синтаксис
object.MoveFolder (source, destination) |
Параметры
Параметр | Описание |
---|---|
object | Переменная, возвращающая объект FileSystemObject. |
source | Строковое выражение, указывающее папку, которую требуется переместить в другое расположение. Для перемещения нескольких папок используются подстановочные знаки. |
destination | Строковое выражение, задающее конечное расположение, куда требуется переместить папку (папки) со всеми вложениями из элемента source. Подстановочные знаки не допускаются. |
Удаление папки (метод DeleteFolder)
DeleteFolder – это метод объекта FileSystemObject, предназначенный для удаления папки с диска со всем ее содержимым.
Синтаксис
object.DeleteFolder folderspec, [force] |
Параметры
Параметр | Описание |
---|---|
object | Переменная, возвращающая объект FileSystemObject. |
folderspec | Строковое выражение, указывающее папку, которую следует удалить. Для удаления нескольких папок используются подстановочные знаки. |
force | Значение типа Boolean: True – удаляются все папки, False (по умолчанию) – не удаляются папки с атрибутом «только для чтения» (необязательный параметр). |
Метод DeleteFolder
удаляет папки независимо от того, есть ли в них содержимое или нет.
Удаление папки (оператор RmDir)
RmDir – это оператор, предназначенный для удаления пустых папок и каталогов.
Синтаксис
- path – строковое выражение, определяющее каталог или папку, которую необходимо удалить.
Если удаляемый каталог или папка содержит файлы, произойдет ошибка.
Примеры
Пример 1
Создание папок в VBA Excel с помощью метода CreateFolder:
Sub Primer1() Dim fso As Object, i As Integer ‘Создаем новый экземпляр FileSystemObject Set fso = CreateObject(«Scripting.FileSystemObject») ‘Создаем несколько новых папок With fso .CreateFolder («C:\Папка главная») For i = 1 To 5 .CreateFolder «C:\Папка главная\Папка » & i Next End With End Sub |
В результате работы этого кода на диске C
будет создана Папка главная
и в ней еще 5 папок, которые будем использовать для копирования, перемещения и удаления.
Пример 2
Копирование папок в VBA Excel с помощью метода CopyFolder:
Sub Primer2() Dim fso As Object Set fso = CreateObject(«Scripting.FileSystemObject») ‘Копируем папки With fso .CopyFolder «C:\Папка главная\Папка 2», «C:\Папка главная\Папка 1\» .CopyFolder «C:\Папка главная\Папка 3», «C:\Папка главная\Папка 1\Папка 2\» End With End Sub |
Код этого примера копирует папки следующим образом: Папка 2
в Папка 1
, а Папка 3
в расположение \Папка 1\Папка 2\
.
Пример 3
Перемещение папок в VBA Excel с помощью метода MoveFolder:
Sub Primer3() Dim fso As Object Set fso = CreateObject(«Scripting.FileSystemObject») ‘Перемещаем папки With fso .MoveFolder «C:\Папка главная\Папка 3», «C:\Папка главная\Папка 2\» .MoveFolder «C:\Папка главная\Папка 4», «C:\Папка главная\Папка 2\» .MoveFolder «C:\Папка главная\Папка 5», «C:\Папка главная\Папка 2\Папка 4\» End With End Sub |
Пример 4
Удаление папок в VBA Excel с помощью метода DeleteFolder:
Sub Primer4() Dim fso As Object Set fso = CreateObject(«Scripting.FileSystemObject») ‘Удаляем папки с содержимым With fso .DeleteFolder «C:\Папка главная\Папка 1» .DeleteFolder «C:\Папка главная\Папка 2» End With End Sub |
Пример 5
Удаление пустой папки в VBA Excel с помощью оператора RmDir:
Sub Primer5() ‘Удаляем пустую папку RmDir «C:\Папка главная» End Sub |
Создание документа Word из таблицы Excel
Макрос предназначен для программного создания документов Word на основе шаблона
(без использования функции слияния в Word)
В прикреплённом к статье архиве находятся 2 файла:
- шаблон договора в формате Microsoft Word (расширение .dot)
- файл Excel с макросом
Настройки макроса задаются в коде:
Const ИмяФайлаШаблона = «шаблон.dot»
Const КоличествоОбрабатываемыхСтолбцов = 8
Const РасширениеСоздаваемыхФайлов = «.doc»
При нажатии кнопки запуска макрос на основе шаблона dot создаёт очередной файл, и в этом документе производит замену текста («кода поля») из первой строки файла Excel на значение поля (из очередной строки с данными файла Excel)
Папка для сформированных документов создаётся автоматически, и содержит в имени текущую дату и время
(например, созданная папка будет называться Договоры, сформированные 01-05-2011 в 15-03-24)
Имена создаваемых файлов формируются объединением полей фамилия, имя и отчество, с добавлением расширения doc
PS: Макрос был написан достаточно давно, когда я только начинал изучать VBA, — так что код недостаточно универсален.
Но, в качестве примера, пожалуй, подойдёт (если вам нужен более функциональный макрос, воспользуйтесь универсальной надстройкой (см. ниже))
Ознакомьтесь также с универсальной надстройкой формирования документов по шаблонам,
которая может делать всё тоже самое, что и эта программа,
только в качестве шаблонов могут выступать, помимо документов Word, ещё текстовые файлы, и книги Excel.
В надстройке — много возможностей, и полезных дополнений: склонение ФИО в родительный и дательный падежи, автоматический вывод на печать (с заданным количеством копий), размещение созданных файлов в разных папках, создание и рассылка писем со вложениями, и множество других полезных функций.
По вышеприведённой ссылке программа заполнения документов Word из Excel доступна для бесплатного скачивания.
Внимание: просьбы о доработке макроса, описанного в этой статье, не принимаются.
Есть новая (универсальная) версия, — в которой уже есть практически всё, что может понадобиться.
Файловые функции VBA | Excel для всех
Главная » Функции VBA »
28 Апрель 2011 Дмитрий 75980 просмотров
- CurDir() — функция, которая возвращает путь к каталогу(для указанного диска), в котором по умолчанию будут сохраняться файлы:
Dim sCurDir As String sCurDir = CurDir("D")
Dim sCurDir As String
sCurDir = CurDir(«D») - Dir() — позволяет искать файл или каталог по указанному пути на диске. Пример использования можно посмотреть в статье: Просмотреть все файлы в папке
- EOF() — при операции записи в файл на диске эта функция вернет True, если вы находитесь в конце файла. Обычно используется при работе с текстовыми файлами — .txt. При сохранении книг Excel лучше использовать стандартные методы: Save и SaveAs.
- Error() — позволяет вернуть описание ошибки по ее номеру. Генерировать ошибку нужно при помощи метода RaiseError() специального объекта Er.
- Print — записывает в открытый файл указанный текст. Далее будет приведен пример использования данной функции
- FreeFile() — позволяет определить номер следующего свободного файла, который можно использовать как номер файла при его открытии методом Open. Предпочтительно применять именно этот метод определения номера файла(вместо статичного #1), чтобы не было неоднозначности обращения к файлам. Ниже приведены примеры применения данной функции при обращении к файлам
- FileAttr() — позволяет определить, как именно был открыт файл в файловой системе: на чтение, запись, добавление, в двоичном или текстовом режиме и т.п. Применяется для работы с текстовыми файлами, открытыми при помощи
Open "C:\Text1.txt" For [] As #1
Открыть файл можно несколькими способами, приведу примеры наиболее распространенных вариантов:- Input() — открывает текстовый файл на чтение. Т.е. таким методом можно открыть файл и вытянуть из него данные. Например, чтобы считать информацию из файла C:Text1.txt и вывести ее в окно Immediate можно применить такой код:
Dim MyChar Open "C:\Text1.txt" For Input As #1 'Открываем файл функцией Open() на чтение(Input) Do While Not EOF(1) 'пока файл не кончился ' Получаем по одному символу и добавляем его к предыдущим MyChar = MyChar & Input(1, #1) Loop Close #1 ' Закрываем файл 'Выводим его содержание в окно Immediate '(отобразить Immediate: Ctrl+G в окне редактора VBA) Debug.Print MyChar 'или в MsgBox MsgBox MyChar, vbInformation, "www.excel-vba.ru"
Dim MyChar
Open «C:\Text1.txt» For Input As #1 ‘Открываем файл функцией Open() на чтение(Input)
Do While Not EOF(1) ‘пока файл не кончился
‘ Получаем по одному символу и добавляем его к предыдущим
MyChar = MyChar & Input(1, #1)
Loop
Close #1 ‘ Закрываем файл
‘Выводим его содержание в окно Immediate
‘(отобразить Immediate: Ctrl+G в окне редактора VBA)
Debug.Print MyChar
‘или в MsgBox
MsgBox MyChar, vbInformation, «www.excel-vba.ru» - Ouput() — метод открывает файл для записи. Например, чтобы записать в файл строку, содержащую все ячейки в выделенном диапазоне, можно использовать такой код:
Sub SelectionToTxt() Dim s As String, rc As Range Dim ff 'запоминаем все значения из выделенной строки в строку For Each rc In Selection If s = "" Then 'если пока ничего не записали - присваиваем только значение ячейки s = rc.Value Else 'если уже записано - добавляем через TAB s = s & vbTab & rc.Value End If Next ff = FreeFile 'Открываем текстовый файл 'если файла нет - он будет создан Open "C:\Text1.txt" For Output As #ff 'записываем значение строки в файл Print #ff, s Close #ff ' Закрываем файл End Sub
Sub SelectionToTxt()
Dim s As String, rc As Range
Dim ff
‘запоминаем все значения из выделенной строки в строку
For Each rc In Selection
If s = «» Then ‘если пока ничего не записали — присваиваем только значение ячейки
s = rc.Value
Else ‘если уже записано — добавляем через TAB
s = s & vbTab & rc.Value
End If
Next
ff = FreeFile
‘Открываем текстовый файл
‘если файла нет — он будет создан
Open «C:\Text1.txt» For Output As #ff
‘записываем значение строки в файл
Print #ff, s
Close #ff ‘ Закрываем файл
End SubВажно помнить, что при открытии файла таким методом(Output) все предыдущие данные из файла стираются и в файле будет записано только то, что мы записали в текущем сеансе. Если данные необходимо добавить к имеющимся — используется метод Append
- Append() — метод открывает файл для записи, но в отличии от Output записывает данные в конец файла, а не перезаписывает текущие данные. Например, код добавления выделенных ячеек как одной строки в имеющийся файл будет выглядеть так:
Sub SelectionToTxt_Add() Dim s As String, rc As Range Dim ff 'запоминаем все значения из выделенной строки в строку For Each rc In Selection If s = "" Then 'если пока ничего не записали - присваиваем только значение ячейки s = rc.Value Else 'если уже записано - добавляем через TAB s = s & vbTab & rc.Value End If Next ff = FreeFile 'Открываем текстовый файл 'если файла нет - он будет создан Open "C:\Text1.txt" For Append As #ff 'записываем значение строки в файл Print #ff, s Close #ff ' Закрываем файл End Sub
Sub SelectionToTxt_Add()
Dim s As String, rc As Range
Dim ff
‘запоминаем все значения из выделенной строки в строку
For Each rc In Selection
If s = «» Then ‘если пока ничего не записали — присваиваем только значение ячейки
s = rc.Value
Else ‘если уже записано — добавляем через TAB
s = s & vbTab & rc.Value
End If
Next
ff = FreeFile
‘Открываем текстовый файл
‘если файла нет — он будет создан
Open «C:\Text1.txt» For Append As #ff
‘записываем значение строки в файл
Print #ff, s
Close #ff ‘ Закрываем файл
End Sub
- Input() — открывает текстовый файл на чтение. Т.е. таким методом можно открыть файл и вытянуть из него данные. Например, чтобы считать информацию из файла C:Text1.txt и вывести ее в окно Immediate можно применить такой код:
- FileDateTime() — позволяет получить информацию о последнем времени обращения к указанному файлу. Если к файлу после создания ни разу не обращались, то это будет время создания файла. Если попытаться обратиться к уже открытой книге/файлу — то будет получено время открытия книги/файла, а не создания или сохранения.
sFileDateTime = FileDateTime("C:\Text1.txt")
sFileDateTime = FileDateTime(«C:\Text1.txt»)
- FileLen() — позволяет определить длину указанного файла в байтах:
MsgBox FileLen("C:\Text1.txt") & " bites", vbInformation, "www.excel-vba.ru"
MsgBox FileLen(«C:\Text1.txt») & » bites», vbInformation, «www.excel-vba.ru»
- GetAttr() — возможность обратиться к файлу к файловой системе и получить информацию об его атрибутах (скрытый, доступен только для чтения, архивный и т.п.)
- InputB() — позволяет указывать количество байт, которые надо считать из файла. Альтернатива методу Open в случаях, когда необходимо считывать данные не по конкретным строкам, а именно побайтово.
- Loc() — от Location, то есть местонахождение — возвращает число, которое определяет текущее место вставки или чтения в открытом файле.
- Seek() — очень похожа на функцию Loc(), но Seek() возвращает информацию о позиции, с которой будет выполняться следующая операция чтения или вставки.
- LOF() — length of file — позволяет определить длину открытого файла в байтах.
VBA FileSystemObject (FSO) в Excel
Загрузка …
Объект VBA FileSystemObject (FSO) обеспечивает доступ к файловой системе компьютера, позволяя создавать, удалять, редактировать и копировать файлы / папки . Он также позволяет вам получать различные свойства файловой и папочной системы. Объект FileSystem доступен во всех приложениях MS Office, включая Excel VBA.
Помните, что объект VBA FileSystemObject (FSO) поддерживается только в системах Windows. Для Mac OS я рекомендую вам использовать встроенные собственные методы VBA для управления файлами и папками.
Методы объекта FileSystem VBA
Ниже перечислены функции, расширенные объектом VBA FileSystemObject (VBA FSO):
Создать объект файловой системы VBA
Объект FSO может быть создан с использованием двух разных подходов (аналогично большинству объектов в VBA). Первый рекомендуется, так как вам не нужно ссылаться на какие-либо библиотеки.
Поздняя привязка
Для создания FileSystemObject (FSO) в Excel VBA вы можете использовать функцию CreateObject. Преимущество заключается в отсутствии необходимости объявлять объект FSO и, следовательно, необходимости ссылки на библиотеку.
Dim fso как объект
Установите fso = CreateObject («Scripting.FileSystemObject»)
.
Dim fso as Object Установить fso = CreateObject («Scripting.FileSystemObject») |
Раннее связывание
Для обучения лучше обратиться к библиотеке Microsoft.Scripting.Runtime . Перейдите в Инструменты -> Ссылки и выберите Microsoft.Время выполнения сценария . Это позволяет вам напрямую объявить FileSystemObject следующим образом:
Dim fso как FileSystemObject
Установите fso = New FileSystemObject
Dim fso as FileSystemObject Set fso = New FileSystemObject |
Этот подход называется Early Binding и требует ссылки на библиотеку. Я не рекомендую этот подход, поскольку он затрудняет совместное использование файла с другими пользователями без объяснения того, как ссылаться на библиотеку.
Создание файлов и папок
Объект VBA FSO может использоваться для создания текстовых файлов или папок в каталоге:
Для создания папки используйте метод VBA CreateFolder объекта FSO:
Установите fso = CreateObject («Scripting.FileSystemObject»)
‘Создать новую папку
fso.CreateFolder «C: \ NewFolder»
Установить fso = CreateObject («Scripting.FileSystemObject») ‘Создать новую папку fso.CreateFolder «C: \ NewFolder» |
Текстовые файлы могут быть созданы с использованием метода VBA CreateTextFile :
Установите fso = CreateObject («Scripting.FileSystemObject»)
‘Создать TextStream
Установите ts = fso.CreateTextFile («C: \ hello.txt»)
.
Set fso = CreateObject («Scripting.FileSystemObject») ‘Создать TextStream Set ts = fso.CreateTextFile («C: \ hello.txt «) |
Собственный подход VBA лучше подходит для создания двоичных файлов или записи в файлы.
Проверить наличие файлов, папок и дисков
Объект VBA FSO может использоваться для проверки наличия файла, папки или диска. Ниже приведены примеры, показывающие, как проверить, существует ли один из них или отсутствует. Вы также можете использовать собственную процедуру VBA FileCopy для копирования файлов.
Установите fso = CreateObject («Scripting.FileSystemObject»)
Отлаживать.Вывести fso.DriveExists («D») ‘Результат: True или False в зависимости от того, существует ли диск «D:»
Debug.Print fso.FileExists («D: \ Hello.txt») ‘Результат: True или False в зависимости от того, существует ли файл
Debug.Print fso.FileExists («D: \ SomeFolder») ‘Результат: True или False в зависимости от того, существует ли папка
Установить fso = CreateObject («Scripting.FileSystemObject») Debug.Print fso.DriveExists («D») ‘Результат: True или False в зависимости от того, существует ли диск «D:» Debug.Print fso.FileExists («D: \ Hello.txt») ‘Результат: True или False в зависимости от того, существует ли файл Debug.Print fso.FileExists («D: \ SomeFolder»)’ Результат: True или False в зависимости от того, существует ли Папка существует |
Копирование файлов и папок
FileSystemObject позволяет копировать файлы и папки. Посмотрите CopyFile и CopyFolder по деталям:
Установите fso = CreateObject («Scripting.FileSystemObject»)
‘Скопируйте только файл Hello.xlsx
fso.CopyFile «c: \ Src \ Hello.xlsx», «c: \ Dest \»
‘Скопируйте только папку Hello
fso.CopyFolder «c: \ Src \ Hello», «c: \ Dest \»
Set fso = CreateObject («Scripting.FileSystemObject») ‘Скопируйте только файл Hello.xlsx fso.CopyFile «c: \ Src \ Hello.xlsx», «c: \ Dest \» ‘Скопируйте только папку Hello fso.CopyFolder «c: \ Src \ Hello», «c: \ Dest \» |
Чтение и запись в текстовые файлы
Объект VBA FSO позволяет создавать только текстовые файлы.VBA изначально позволяет создавать и записывать файлы, я рекомендую вам прочитать мой пост о записи в файлы в VBA . Объект FSO не расширяет какие-либо методы для записи в двоичные файлы, поэтому вам нужно вернуться к собственному VBA Open , оператору .
Ниже показан пример создания текстовых файлов с помощью FSO и записи строки в файл.
Dim fso как Object, ts как Object
Установите fso = CreateObject («Scripting.FileSystemObject»)
‘Создать TextStream
Установите ts = fso.CreateTextFile («C: \ hello.txt»)
‘Записать в текстовый файл 2 строки, заканчивающиеся символом новой строки
ts.WriteLine «Hello World!»
ts.WriteLine «Привет, народ!»
‘Закройте файл
ts.Close
Dim fso as Object, ts as Object Set fso = CreateObject («Scripting.FileSystemObject») ‘Создание TextStream Set ts = fso.CreateTextFile («C: \» ) ‘Записать 2 строки, заканчивающиеся символом новой строки, в текстовый файл ts.WriteLine «Hello World!» ts.WriteLine «Привет народ!» ‘Закрываем файл т.с.Закрываем |
Dim fso как Object, ts как Object
Установите fso = CreateObject («Scripting.FileSystemObject»)
‘Открыть тот же файл для чтения
Установите ts = fso.OpenTextFile («C: \ hello.txt», ForReading, True, TristateFalse)
‘Читать до конца
До тех пор, пока ts.AtEndOfStream
Debug.Print «Линия печати» & ts.Line
Debug.Print ts.ReadLine ‘Распечатать строку из файла
Петля
ts.Закрыть
Dim fso as Object, ts as Object Set fso = CreateObject («Scripting.FileSystemObject») ‘Открыть тот же файл для чтения Установить ts = fso.OpenTextFile («C: \ hello. txt «, ForReading, True, TristateFalse) ‘Прочитать до конца Сделать до ts.AtEndOfStream Debug.Print» Printing line «& ts.Line Debug.Print ts.ReadLine ‘Распечатать строку из файла Loop ts.Close |
Получить файл, свойства папки
Объект FSO менее необходим для создания, чтения / записи файлов или папок, поскольку он копирует существующие встроенные функции VBA. Однако это полезно, когда вы хотите получить свойства файла или папки. Ниже приведен простой пример того, как получить различные свойства файла и папки. Дополнительные сведения см. В методах VBA GetFile и VBA GetFolder .
Установите fso = CreateObject («Scripting.FileSystemObject»)
‘Пример файла
Set f = fso.GetFile («C: \ Hello.txt») ‘Возвращает объект File
‘Теперь мы можем получить различные свойства файла
Debug.Print f.DateCreated ‘Дата создания файла
Debug.Print f.Size ‘Размер файла в байтах
‘Пример папки
Set f = fso.GetFolder («C: \ Src \») ‘Вернуть Folderobject
‘Теперь мы можем получить различные свойства файла
Debug.Print f.DateCreated ‘Дата создания папки
Отлаживать.Print f.Size ‘Размер папки в байтах
Set fso = CreateObject («Scripting.FileSystemObject») ‘Пример для файла Set f = fso.GetFile («C: \ Hello.txt»)’ Вернуть объект File ‘Теперь мы можно получить различные свойства файла Debug.Print f.DateCreated ‘Дата создания файла Debug.Print f.Size’ Размер файла в байтах ‘Пример для папки Установить f = fso.GetFolder («C: \ Src \») ‘Вернуть Folderobject ‘ Теперь мы можем получить различные свойства файла Debug.Print f.DateCreated ‘Дата создания папки Debug.Print f.Size’ Размер папки в байтах |
Вы также можете получить аналогичные свойства для дисков с помощью метода VBA GetDrive .
.
Использование VBA FileSystemObject (FSO) в Excel
Когда мы используем VBA в Excel, в основном это делается для автоматизации наших задач.
Это также означает, что большую часть времени мы работаем с ячейками и диапазонами, рабочими листами, книгами и другими объектами, которые являются частью приложения Excel.
Но VBA намного мощнее, и его также можно использовать для работы с вещами за пределами Excel.
В этом руководстве я покажу вам, как использовать VBA FileSystemObject (FSO) для работы с файлами и папками в вашей системе или на сетевых дисках.
Что такое VBA FileSystemObject (FSO)?
FileSystemObject (FSO) позволяет получить доступ к файловой системе вашего компьютера. Используя его, вы можете получить доступ и изменить файлы / папки / каталоги в вашей компьютерной системе.
Например, ниже приведены некоторые из вещей, которые вы можете делать с помощью FileSystemObject в Excel VBA:
- Проверьте, существует ли файл или папка.
- Создать или переименовать папки / файлы.
- Получить список всех имен файлов (или имен вложенных папок) в папке.
- Скопируйте файлы из одной папки в другую.
Надеюсь, вы уловили идею.
Я расскажу обо всех вышеперечисленных примерах (и других) позже в этом руководстве.
Хотя некоторые из вещей, упомянутых выше, также могут быть выполнены с использованием традиционных функций VBA (таких как функция DIR) и методов, это приведет к созданию более длинных и сложных кодов. FileSystemObject позволяет легко работать с файлами и папками, сохраняя при этом чистый и короткий код.
Примечание. FSO можно использовать только в Excel 2000 и более поздних версиях.
К каким объектам можно получить доступ через FileSystemObject?
Как я упоминал выше, вы можете получать доступ к файлам и папкам и изменять их, используя FileSystemObject в VBA.
Ниже приведена таблица, в которой показаны наиболее важные объекты, к которым вы можете получить доступ и изменить с помощью FSO:
Объект | Описание |
Привод | Drive Object позволяет получить информацию о диске, например, существует он или нет, путь к нему, тип диска (съемный или фиксированный), размер и т. Д. |
Папка | Папка объект позволяет вам создавать или изменять папки в вашей системе. Например, с помощью этого объекта вы можете создавать, удалять, переименовывать, копировать папки. |
Файл | File Object позволяет вам работать с файлами в вашей системе. Например, с помощью этого объекта вы можете создавать, открывать, копировать, перемещать и удалять файлы. |
TextStream | TextStream позволяет создавать или читать текстовые файлы. |
Каждый из перечисленных выше объектов имеет методы, которые можно использовать для работы с ними.
В качестве примера, если вы хотите удалить папку, вы будете использовать метод DeleteFolder объекта Folder. Точно так же, если вы хотите скопировать файл, вы будете использовать метод CopyFile объекта File.
Не волнуйтесь, если это кажется непонятным или сложным. Вы получите гораздо лучшее понимание, когда рассмотрите примеры, которые я рассмотрел в этом руководстве.
Просто для справки я рассмотрел все методы FileSystemObject (для каждого объекта) в конце этого руководства.
Включение объекта FileSystemObject в Excel VBA
FileSystemObject по умолчанию недоступен в Excel VBA.
Поскольку мы имеем дело с файлами и папками, находящимися за пределами приложения Excel, нам нужно сначала создать ссылку на библиотеку, которая содержит эти объекты (диски, файлы, папки).
Теперь есть два способа начать использовать FileSystemObject в Excel VBA:
- Установка ссылки на библиотеку времени выполнения сценариев Microsoft (Scrrun.dll)
- Создание объекта для ссылки на библиотеку из самого кода
Хотя оба этих метода работают (и я покажу вам, как это сделать дальше), я рекомендую использовать первый метод.
Примечание. Когда вы включаете FileSystemObject, вы можете получить доступ ко всем объектам в нем. Это включает в себя FileSystemObject, Drive, Files, Folders и т. Д. В этом руководстве я сосредоточусь в основном на FileSystemObject.
Установка ссылки на библиотеку времени выполнения сценариев Microsoft
Когда вы создаете ссылку на библиотеку времени выполнения сценариев, вы разрешаете Excel VBA доступ ко всем свойствам и методам файлов и папок.Как только это будет сделано, вы можете обратиться к объекту файлов / папок / дисков из Excel VBA (точно так же, как вы можете ссылаться на ячейки, рабочие листы или книги).
Ниже приведены шаги по созданию ссылки на библиотеку времени выполнения сценариев Microsoft:
- В редакторе VB щелкните Инструменты.
- Щелкните ссылку «Ссылки».
- В открывшемся диалоговом окне «Ссылки» прокрутите доступные ссылки и установите флажок «Microsoft Scripting Runtime».
- Нажмите ОК.
Вышеупомянутые шаги теперь позволят вам обращаться к объектам FSO из Excel VBA.
Создание экземпляра FileSystemObject в коде
После того, как вы установили ссылку на библиотеку Scripting FileSystemObject, вам необходимо создать экземпляр объекта FSO в вашем коде.
После его создания вы можете использовать его в VBA.
Ниже приведен код, который устанавливает объектную переменную MyFSO как объект FileSystemObject:
Подложка СозданиеFSO () Dim MyFSO как объект FileSystemObject Установите MyFSO = New FileSystemObject Концевой переводник
В этом коде сначала я объявил переменную MyFSO как объект типа FileSystemObject.Это возможно только потому, что я создал ссылку на библиотеку времени выполнения сценариев Microsoft. Если ссылка не создана, это приведет к ошибке (поскольку Excel не распознает, что означает FileSystemObject).
Во второй строке происходят две вещи:
- Ключевое слово NEW создает экземпляр FileSystemObject. Это означает, что теперь я могу использовать все методы FileSystemObject для работы с файлами и папками. Если вы не создадите этот экземпляр, вы не сможете получить доступ к методам FSO.
- Ключевое слово SET устанавливает объект MyFSO для этого нового экземпляра FileSystemObject. Это позволяет мне использовать этот объект для доступа к файлам и папкам. Например, если мне нужно создать папку, я могу использовать метод MyFSO.CreateFolder.
Если хотите, вы также можете объединить два вышеуказанных оператора в один, как показано ниже:
Подложка СозданиеFSO () Dim MyFSO как новый объект FileSystemObject Концевой переводник
Большим преимуществом использования этого метода (который заключается в установке ссылки на библиотеку времени выполнения сценариев Microsoft) является то, что при использовании объектов FSO в своем коде вы сможете использовать функцию IntelliSense, которая показывает связанные методы и свойства. с объектом (как показано ниже).
Это невозможно, если вы создаете ссылку из кода (рассматривается далее).
Создание объекта из кода
Другой способ создать ссылку на FSO — это сделать это из кода. В этом методе вам не нужно создавать ссылку (как это было сделано в предыдущем методе).
Когда вы пишете код, вы можете создать объект внутри кода и обратиться к Scripting.FileSystemObject.
Приведенный ниже код создает объект FSO, а затем делает его типом FileSystemObject.
Sub FSODemo () Dim FSO как объект Установите FSO = CreateObject ("Scripting.FileSystemObject") Концевой переводник
Хотя это может показаться более удобным, большим недостатком использования этого метода является то, что он не отображает IntelliSense, когда вы работаете с объектами в FSO. Для меня это огромный минус, и я всегда рекомендую использовать предыдущий метод включения FSO (который заключается в установке ссылки на «Microsoft Scripting Runtime»)
Примеры объектов файловой системы VBA
Теперь давайте углубимся и рассмотрим несколько практических примеров использования FileSystemObject в Excel.
Пример 1. Проверьте, существует ли файл или папка
Следующий код проверит, существует ли папка с именем «Test» (в указанном месте).
Если папка существует, условие ЕСЛИ истинно, и в окне сообщения отображается сообщение «Папка существует». А если его не существует, отображается сообщение «Папка не существует».
Подложка CheckFolderExist () Dim MyFSO как объект FileSystemObject Установите MyFSO = New FileSystemObject Если MyFSO.FolderExists ("C: \ Users \ sumit \ Desktop \ Test") Затем MsgBox «Папка существует» Еще MsgBox «Папка не существует» Конец, если Концевой переводник
Точно так же вы также можете проверить, существует файл или нет.
Приведенный ниже код проверяет, есть ли в указанной папке файл с именем Test.xlsx.
Подложка CheckFileExist () Dim MyFSO как объект FileSystemObject Установите MyFSO = New FileSystemObject Если MyFSO.FileExists ("C: \ Users \ sumit \ Desktop \ Test \ Test.xlsx ") Тогда MsgBox «Файл существует» Еще MsgBox «Файл не существует» Конец, если Концевой переводник
Пример 2: Создание новой папки в указанном месте
Приведенный ниже код создаст папку с именем «Test» на диске C моей системы (вам нужно будет указать путь в вашей системе, в котором вы хотите создать папку).
Подложка CreateFolder () Dim MyFSO как объект FileSystemObject Установите MyFSO = New FileSystemObject MyFSO.CreateFolder ("C: \ Users \ sumit \ Desktop \ Test") Концевой переводник
Хотя этот код работает нормально, он покажет ошибку, если папка уже существует.
Приведенный ниже код проверяет, существует ли уже папка, и создает папку, если это не так. Если папка уже существует, отображается сообщение. Чтобы проверить, существует ли папка, я использовал метод FolderExists FSO.
Подложка CreateFolder () Dim MyFSO как объект FileSystemObject Установите MyFSO = New FileSystemObject Если MyFSO.FolderExists ("C: \ Users \ sumit \ Desktop \ Test"), то MsgBox «Папка уже существует» Еще MyFSO.CreateFolder ("C: \ Users \ sumit \ Desktop \ Test") Конец, если Концевой переводник
Пример 3: Получить список всех файлов в папке
В приведенном ниже коде будут показаны имена всех файлов в указанной папке.
Подложка GetFileNames () Dim MyFSO как объект FileSystemObject Dim MyFile As File Dim MyFolder As Folder Установите MyFSO = New Scripting.FileSystemObject Установите MyFolder = MyFSO.GetFolder ("C: \ Users \ sumit \ Desktop \ Test") Для каждого MyFile в MyFolder.Files Debug.Print MyFile.Name Следующий MyFile Концевой переводник
Этот код немного сложнее тех, которые мы уже видели.
Как я упоминал выше в этом руководстве, когда вы ссылаетесь на «Microsoft Scripting Runtime Library», вы можете использовать FileSystemObject, а также все другие объекты (такие как файлы и папки).
В приведенном выше коде я использую три объекта — FileSystemObject, File и Folder. Это позволяет мне просматривать каждый файл в указанной папке. Затем я использую свойство name, чтобы получить список всех имен файлов.
Обратите внимание, что я использую Debug.Print для получения имен всех файлов. Эти имена будут перечислены в непосредственном окне редактора VB.
Пример 4: Получить список всех подпапок в папке
Приведенный ниже код даст имена всех подпапок в указанной папке.Логика точно такая же, как в приведенном выше примере. Вместо файлов в этом коде мы использовали подпапки.
Sub GetSubFolderNames () Dim MyFSO как объект FileSystemObject Dim MyFile As File Dim MyFolder As Folder Dim MySubFolder As Folder Установите MyFSO = New Scripting.FileSystemObject Установите MyFolder = MyFSO.GetFolder ("C: \ Users \ sumit \ Desktop \ Test") Для каждой MySubFolder в MyFolder.SubFolders Debug.Print MySubFolder.Name Далее MySubFolder Концевой переводник
Пример 5: Копирование файла из одного места в другое
Приведенный ниже код скопирует файл из папки «Source» и скопирует его в папку «Destination».
Дополнительный файл копирования () Dim MyFSO как объект FileSystemObject Развернуть исходный файл как строку Dim DestinationFolder As String Установите MyFSO = New Scripting.FileSystemObject SourceFile = "C: \ Users \ sumit \ Desktop \ Source \ SampleFile.xlsx" DestinationFolder = "C: \ Users \ sumit \ Desktop \ Destination" MyFSO.CopyFile Источник: = Исходный файл, Место назначения: = Папка назначения & "\ SampleFileCopy.xlsx" Концевой переводник
В приведенном выше коде я использовал две переменные — SourceFile и DestinationFolder.
Исходный файл содержит адрес файла, который я хочу скопировать, а переменная DestinationFolder содержит адрес папки, в которую я хочу скопировать файл.
Обратите внимание, что при копировании файла недостаточно указать имя целевой папки. Также необходимо указать имя файла. Вы можете использовать то же имя файла или изменить его. В приведенном выше примере я скопировал файл и назвал его SampleFileCopy.xlsx
.
Пример 6: Копирование всех файлов из одной папки в другую
Приведенный ниже код скопирует все файлы из исходной папки в папку назначения.
Sub CopyAllFiles () Dim MyFSO как объект FileSystemObject Dim MyFile As File Dim SourceFolder As String Dim DestinationFolder As String Dim MyFolder As Folder Dim MySubFolder As Folder SourceFolder = "C: \ Users \ sumit \ Desktop \ Source" DestinationFolder = "C: \ Users \ sumit \ Desktop \ Destination" Установите MyFSO = New Scripting.FileSystemObject Установите MyFolder = MyFSO.GetFolder (SourceFolder) Для каждого MyFile в MyFolder.Files MyFSO.Источник CopyFile: = MyFSO.GetFile (MyFile), _ Назначение: = DestinationFolder & "\" & MyFile.Name, Overwritefiles: = False Следующий MyFile Концевой переводник
Приведенный выше код скопирует все файлы из исходной папки в целевую папку.
Обратите внимание, что в методе MyFSO.CopyFile я указал для свойства «Overwritefiles» значение False (по умолчанию это True). Это гарантирует, что если у вас уже есть файл в папке, он не будет скопирован (и вы увидите ошибку).Если вы удалите «Overwritefiles» или установите для него значение True, если в целевой папке есть файлы с таким же именем, они будут перезаписаны.
Pro Совет: При копировании файлов всегда есть вероятность перезаписать файлы. В этом случае хорошей идеей будет добавить метку времени вместе с именем. Это гарантирует, что имена всегда будут разными, и вы сможете легко отслеживать, какие файлы были скопированы и в какое время.
Если вы хотите скопировать файлы только определенного расширения, вы можете сделать это с помощью оператора IF Then, чтобы проверить, является ли расширение xlsx или нет.
Sub CopyExcelFilesOnly () Dim MyFSO как объект FileSystemObject Dim MyFile As File Dim SourceFolder As String Dim DestinationFolder As String Dim MyFolder As Folder Dim MySubFolder As Folder SourceFolder = "C: \ Users \ sumit \ Desktop \ Source" DestinationFolder = "C: \ Users \ sumit \ Desktop \ Destination" Установите MyFSO = New Scripting.FileSystemObject Установите MyFolder = MyFSO.GetFolder (SourceFolder) Для каждого MyFile в MyFolder.Files Если MyFSO.GetExtensionName (MyFile) = "xlsx" Тогда MyFSO.CopyFile Источник: = MyFSO.GetFile (MyFile), _ Назначение: = DestinationFolder & "\" & MyFile.Name, Overwritefiles: = False Конец, если Следующий MyFile Концевой переводник
Методы FileSystemObject (FSO)
Вот методы, которые вы можете использовать для каждого объекта. Это просто для справки, и не стоит особо об этом беспокоиться. Использование некоторых из них было показано в приведенных выше примерах.
Методы FSO | Для объекта | Описание |
Привод существует | Привод | Проверяет, существует ли диск |
GetDrive | Привод | Возвращает экземпляр приводного объекта на основе указанного пути |
GetDriveName | Привод | Повторяет имя диска |
Путь сборки | Файл / Папка | Создать путь из существующего пути и имени |
Копировать файл | Файл / Папка | Копирует файл |
GetAbsolutePathName | Файл / Папка | Вернуть каноническое представление пути |
GetBaseName | Файл / Папка | Вернуть базовое имя из пути.Например, «D: \ TestFolder \ TestFile.xlsm» вернет TextFile.xlsm |
GetTempName | Файл / Папка | Сгенерировать имя, которое можно использовать для имени временного файла |
CopyFolder | Папка | Копирует папку из одного места в другое |
CreateFolder | Папка | Создает новую папку |
DeleteFolder | Папка | Удаляет указанную папку |
Папка существует | Папка | Проверяет, существует ли папка |
GetFolder | Папка | Возвращает экземпляр объекта папки на основе указанного пути |
GetParentFolderName | Папка | Возвращает имя родительской папки на основе указанного пути |
GetSpecialFolder | Папка | Получить расположение различных системных папок. |
MoveFolder | Папка | Перемещает папку из одного места в другое |
Удалить файл | Файл | Удаляет файл |
FileExists | Файл | Проверяет, существует файл или нет |
GetExtensionName | Файл | Возвращает расширение файла |
GetFile | Файл | Возвращает экземпляр файлового объекта на основе указанного пути |
GetFileName | Файл | Возвращает имя файла |
GetFileVersion | Файл | Возвращает версию файла |
MoveFile | Файл | Перемещает файл |
CreateTextFile | Файл | Создает текстовый файл |
GetStandardStream | Файл | Получить стандартный ввод, вывод или поток ошибок |
OpenTextFile | Файл | Открыть файл как TextStream |
Вам также могут понравиться следующие руководства по Excel:
.