Работа с файлами — Страница 2

Прикрепление и извлечение различных файлов из книги Excel

Скриншот программы, позволяющей прикреплять файлы к книге Excel

Можно ли прикрепить (вложить) произвольные файлы в обычную книгу Excel?
А потом извлечь эти файлы в заданную папку, и работать с ними?

Казалось бы, Excel такого не позволяет. (а если и позволяет, то извлечь вложенные файлы без из запуска - весьма проблематично)
Но, при помощи макросов, можно реализовать что угодно (и сохранение\извлечение файлов в том числе)

Теперь прикрепить к книге Excel любой файл, а затем извлечь его в любую папку под заданным именем, можно при помощи нескольких строк кода!

В прикреплённом к статье файле находятся 2 модуля класса (AttachedFiles и AttachedFile), а также примеры их использования в виде макросов, позволяющих управлять вложениями в книге Excel.

Пример использования функционала модулей класса для сохранения в книге Excel исполняемого файла, с последующим извлечением:

Sub ПрикрепитьФайл()    ' прикрепляем файл к книге Excel
    Dim FileManager As New AttachedFiles, res As Boolean
    res = FileManager.AttachNewFile("C:\WINDOWS\notepad.exe")
End Sub
Sub ИзвлечьФайл()    ' из книги Excel на диск
    Dim FileManager As New AttachedFiles, res As Boolean
    On Error Resume Next ' на случай, если среди вложений нет файла notepad.exe
    res = FileManager.GetAttachment("notepad.exe").SaveAs("C:\MyProgram.exe")
End Sub
Sub ЗапуститьВложенныйФайл()    ' из книги Excel на диск
    Dim FileManager As New AttachedFiles
    On Error Resume Next ' на случай, если среди вложений нет файла notepad.exe
    FileManager.GetAttachment("notepad.exe").Run
End Sub

Наружная реклама. Адресная программа. Рекламные щиты

Скриншот листа коммерческого предложения - описание, фото и карта рекламной конструкции

Программа предназначена для формирования коммерческих предложений по наружной рекламе.

В качестве исходных данных выступает файл Excel со списком рекламных объектов.

Список объектов должен содержать следующую информацию (в отдельных столбцах):

  • адрес рекламной конструкции (щита)
  • сторона рекламного щита или перетяжки (А, Б, В, и т.п.)
  • ссылки на фото и карту рекламной конструкции
    (поддерживаются ссылки, не только ведущие на файлы-изображения, но и ссылки на страницу рекламного щита, где размещена информация о конструкции с фотографией и картой)

Пример исходной таблицы: (нажмите для увеличения)

Исходная таблица со списком рекламных щитов, и ссылками на фото и карты

Для каждой строки исходной таблицы, программа создаёт в том же файле отдельный лист,
на который помещает информацию о рекламном щите (перетяжке), а также фотографию и карту объекта.

Фотографии загружаются из интернета, по заданным ссылкам в столбце (столбцах) «Фото / карта»,
и размещаются на создаваемых листах (слева - фото объекта, справа - его карта)

 

Самая сложная часть алгоритма программы - получение ссылок на изображения (фото и карты), имея в наличии только ссылку на страницу рекламной конструкции
(а, зачастую, имея только адрес сайта, и название конструкции)

Программа для регистрации, приема на работу и увольнения сотрудников

Внешний вид программы для облегчения регистрации, приема на работу и увольнения иностранных рабочих

Программа предназначена для автоматизации рабочего места сотрудника, отвечающего за регистрацию, прием на работу, и увольнение иностранных граждан.

В качестве исходных данных используется таблица изображенная на скриншоте.

В этой таблице содержится нужная информация, необходимая для заполнения шаблонов документов.

Программа заполняет следующие документы:

Выборки данных из текстовых файлов инвентаризационной программы

Пример обрабатываемого текстового файла, содержащего данные о компьютере

Программа предназначена для выборки данных из текстовых файлов, которые были сгенерированны инвентаризационной программой

В качестве исходных данных для макроса используются текстовые файлы, в которых находится информация о конфигурации компьютеров
(на каждый компьютер приходится по 3 файла).

Работу макроса можно разделить на следующие этапы:

Разбиение текстового файла (в т.ч. CSV) на несколько файлов с заданным количеством строк

Функция предназначена для разбивки текстового файла на несколько файлов меньшего размера - в каждом из которых будет не более заданнного количества строк

Разделитель строк (обычно это перевод строки - константа vbNewLine) задаётся в качестве параметра функции Delimiter$

Создаваемые файлы получают имена вида filename(1).txt, filename(2).txt и т.д.

Если задан параметр функции DeleteSourceFile равным TRUE, - то исходный файл удаляется после разделения

Функция возвращает коллекцию, содержащую пути к сформированным файлам

В начало каждого создаваемого файла дописывается строка заголовка - первая строка из исходного файла

 

Пример использования функции SplitTextFile:

Sub ПримерИспользованияФункции_SplitTextFile()
    ИмяРазбиваемогоФайла$ = "C:\test\2011 04 17  12-32-30.csv"
    МаксимальноеКоличествоСтрокВфайле& = 3
 
    Dim СписокИмёнФайлов As Collection
    Set СписокИмёнФайлов = SplitTextFile(ИмяРазбиваемогоФайла$, МаксимальноеКоличествоСтрокВфайле&, vbNewLine, False)
 
    For Each Файл In СписокИмёнФайлов
        Debug.Print "Создан файл: " & Файл
    Next
End Sub

Сбор данных из множества текстовых файлов с разделителями

К примеру, есть у вас несколько десятков (или сотен) текстовых файлов с подобным содержимым:
(количество файлов, и количество строк данных в каждом файле не ограничено)

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

На помощь придёт функция DATfolder2Array

Sub ПримерИспользованияФункции_DATfolder2Array()
    Папка = "D:\Проекты\DATs\"    ' папка, в которой будет производиться поиск файлов DAT для обработки
    Dim ErrorsArray    ' пустой массив для ошибок

    ' считываем данные из все файлов .DAT в папке в двумерный массив
    DataArr = DATfolder2Array(Папка, 7, "1,2,4,5", ErrorsArray)
 
    ' результаты выводим на листы "errors" и "result" (они должны существовать)
    Array2worksheet Worksheets("errors"), ErrorsArray, _
                    Array("Имя файла", "Номер строки", "Данные из строки")
    Array2worksheet Worksheets("result"), DataArr, _
                    Array("Ячейка", "Штрих-Код", "Наименование", "код 1С", "код произв.", "кол-во", "счетовод")
End Sub

Вывод диалоговых окон выбора файла и папки средствами VBA (выбрать файл или папку)

Функции GetFileName и GetFilePath по сути аналогичны, и предназначены для вывода диалогового окна выбора файла
(при этом можно указать стартовую папку для поиска файла, и тип/расширение выбираемого файла)

Функция GetFilenamesCollection позволяет выборать сразу несколько файлов в одной папке.

Функция GetFolderPath работает также, только служит для вывода диалогового окна выбора папки.

Функция VB (VBA) для определения продолжительности медиафайла

Получение длительности медиафайла формулой Excel

Узнать продолжительность (время) звучания аудиофайла (MP3, WAV и т.д.), или длительность видеофайла (видеоролика) из Excel совсем несложно.

Используйте функцию ПродолжительностьМедиафайла:
(функцию можно использовать как в макросах, так и на листе Excel)

Sub Пример_Использования_Функции_ПродолжительностьМедиафайла()
    Путь = "E:\Music\MODERN_TALKING With_a_little_love.mp3"
    MsgBox "Продолжительность в секундах: " & ПродолжительностьМедиафайла(Путь), vbInformation, Путь
End Sub

 

А вот и код самой функции:

Надстройка для загрузки списка файлов на лист Excel

Скриншот формы поиска файлов в заданной папке

Надстройка, позволяющая загрузить из выбранной папки список файлов на лист Excel.

Автор: VictorM

Особенности надстройки:

  • задаваемая пользователем глубина поиска в подпапках
  • простановка гиперссылок на листе Excel на найденные файлы
  • вывод дополнительных характеристик файла
  • (размер файла, дата создания файла, полный путь)
  • изменяемая маска поиска (поиск по части имени файла, по расширению, и т.д.)
  • вывод результатов поиска на отдельный лист

 

Получение списка подпапок из заданной папки по маске

Данный макрос позволяет получить список папок, расположенных в выбранной папке (каталоге)

Если надо получить список папок, имена которых удовлетворяют определённому критерию, используйте маску поиска (параметр Mask$)

Код функции и пример использования:

Sub ПоискПодходящихПодпапок()
    ' считываем в колекцию coll подходящие полные пути папок
    ' (поиск папок с названием, начинающимся на 09)
    Set coll = SubFoldersCollection("d:\", "09*")
 
    For i = 1 To coll.Count    ' перебираем все элементы коллекции, содержащей пути к папкам
        Debug.Print coll(i) ' выводим очередной путь в окно Immediate
    Next
End Sub