Как создать архив в excel

Макрос создания копии файла Excel в виде архива ZIP

Макрос для архивации текущей (или активной) книги Excel средствами Windows

(без использования сторонних программ-архиваторов)

Во вложении — файл, при запуске которого автоматически срабатывает такой макрос
При открытии этого файла, если включены макросы, в папке My Program Backups будет сохранена копия книги в формате ZIP (архив)
Папка, если таковая не существует, будет автоматически создана макросом.

Функция для разархивирования (извлечения файлов из архива ZIP)

  • 28553 просмотра

Комментарии

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

Подскажите пожалуйста как создать многотомный архив ZIP и задать размер частей.

Подскажите пожалуйста а как добавить к имени архива путь исходного файла — это нужно например в том случае если имена документов одинаковые? а расположение разное (с учетом того что архив создается не в текущей папке как в примере, а в одну конкретную папку — например D:\backup). Используя приведенный пример(с изменением папки назначения) невозможно отличить резервную копию файла "отчет1" из папки "декабрь" от "отчет1" из папки "ноябрь"

Функция Zip_File ругается если в пути архивируемого файла есть символы «». Есть ли способ обойти это ограничение?

Дмитрий, да, так и должен делать этот код.
Так устроена работа с ZIP в windows
Для распаковки можно использовать WinRAR — быстрее будет. Примеры кода вроде были у меня на сайте.

Подскажите, это только у меня при использовании функции UnZip_File в момент, когда исполняется оператор
oApp.Namespace(DestinationFolder).CopyHere oApp.Namespace(FileNameZip).Items
система автоматически создает в TEMP (c:\Documents and Settings\User\Local Settings\Temp\) папку "Временная папка 1 для имя.zip"
куда параллельно распаковывает архив. Из-за чего извлечение происходит значительно медленнее архивации

При использовании ThisWorkbook.SaveCopyAs FileNameXls
все гиперссылки на папки в сетевом окружении в текущем файле изменяют своё значение с Папка1\Папка2 на ..\Папка1\Папка2
Причем количество "..\" зависит от места копирования, прописанного в FileNameXls (чем глубже папка сохранения относительно текущего файла, тем больше "..\").
Соответственно, все ссылки в текущем файле перестают работать.

Программа продолжает работу с оригинальным файлом

Если нужна копия листа — нужен немного другой код:
1) создаете копию 4-го листа методом Copy
например, ThisWorkbook.worksheets(4).copy

2) сохраняете активную книгу (которая создалась при копировании листа) под заданным именем
например: ActiveWorkbook.SaveAs FileNameXls

3) закрываете книгу-бекап без повтороного сохранения:
ActiveWorkbook.Close False

PS: если сами не разберетесь — всегда можно оформить заказ на сайте

Подскажите пожлста, у меня 2 вопроса. Первый-с каким файлом будет продолжена работа после сохранения, с тем который забэкапился или с оригиналом? И второй- можно ли как то сохранять не всю книгу, а определенный лист от нее? Например-программа состоит из 4 листов, на 4 листе сводная информация. Нужно чтобы создалась копия файла, только с этим единственным 4 листом.

Примеры работы с WinRAR есть в комментариях к этой статье,
и здесь ещё: http://excelvba.ru/code/UNZIP

[quote]но код приведён в другой статье.[/quote]
Не подскажете в какой?
Поиском по сайту не могу найти.

А зачем прописывать в коде какую-то задержку.
Команды ведь последовательно выполняются, — пока архив не создастся, письмо не начнёт формироваться.

И вообще, — в каком формате-то вы архив создаете?
Вы пишете комментарий в статье, где пример кода только для ZIP архивов, — они создаются медленно, средствами Windows.
А изначально вы писали про архив RARб — там совсем другой макрос используется, более надежный и быстрый, — но код приведён в другой статье.

Спасибо за разьяснения.
Тут собственно из папки размером 42мб получается архивный файл 5,6 мб и задержка во времени вот пока эти 5,6 мб пишутся на диск.
У меня сделано сейчас с задержкой времени на 8 сек перед отправкой файла, а на другом компе оказывается этого времени мало, нужно увеличивать.
Вот и думал, может как-то можно этот момент проскочить:).

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

Сделал на основе Ваших кодов архивирование и отправку на почту рабочей папки с помощью WinRar.
Все получается, но возник вопрос:
Есть-ли возможность не создавать(не писать на диск) файл .rar, т.е. создавать его в памяти?
Сейчас у меня работает все классически — создается папка, из нее файл архива пишется на диск, затем удаляется исходная папка (командой rar), файл архива отправляется на почту и затем удаляется. Самое ненужное здесь — это запись на файла на диск перед отправкой, да и время занимает, приходится как-то выкручиваться, ждать перед отправкой файла на почту.

Если запускать на жестком диске (даже подключенном по USB) — работает. При запуске с флэшки ищет новые тома архива (? 🙂 ) (w7x64 office2k10 x64)

Здравствуйте, Дмитрий.
Конечно, это возможно.
Оформляйте заказ на сайте, прикрепляйте свой файл с макросом,
подробно опишите, что, куда, под каким именем, и как часто, должно сохраняться.

Для создания архивов RAR нужна программа WinRAR — она у вас установлена?

Это конечно все хорошо, у меня такой вопрос, у меня имеется макрос который сохраняет книгу, дубликат, с последующей замены его, и создает дубликат на каждый месяц, суть в чем, мне бы хотелось видоизменить этот макрос, что бы сохранял в архив.rar, возможно ли такое?
С Уважением Дмитрий!

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

Здравствуйте, друзья сайта itswat.ru . Людям определённых профессий приходится работать с большим количеством всевозможных документов – внутренних, входящих, исходящих и других. В крупных организациях, где число документов гигантское, система их учёта чётко отлажена. Для создания электронных реестров используются профессиональные программы, лицензия на которые стоит прилично. Но что делать небольшой, только родившейся и ещё не раскрученной компании, или скромному предпринимателю? Документов не слишком много, но они есть и все очень важные. Их потеря может выйти боком, а платить ежемесячно за профессиональное ПО – лишние и пока неуместные траты. Мой ответ – используйте Excel и с помощью нескольких функций систематизируйте и учитывайте свои «важные бумажки». Итак, тема данного материала — как создать реестр документов в Excel. Дело не сложное, но муторное и с множеством нюансов, поэтому расскажу пошагово с картинками.

Что можно поместить в реестр?

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

Вы можете сделать также реестр платежей. Тоже прикреплю фото примера, может, кому-нибудь пригодится.

Я же буду создавать реестр текстовых документов, содержащих описания товаров, которые я когда-то составлял по просьбе одной бизнесвумен, по чистой случайности, завалявшиеся на моём ноутбуке. Делаю я это не по необходимости, а для того, чтобы наглядно продемонстрировать вам весь процесс. Это и будет пошаговая инструкция. Уяснив принципы, вы легко сможете адаптировать её под себя, изменив шапку таблицы и выбрав только те действия, которые понадобятся именно вам. Я использую Excel 2007, но версия не принципиальна. Вы можете работать в Excel 2010 или более поздних годов выпуска, ничего не потеряете, так как во всех редакциях используемые мной функции также присутствуют, а разделы меню и команды находятся там же, где и раньше.

Пошаговая инструкция

Друзья, вот план того, что нам предстоит сделать для создания удобного и функционального реестра документов:

  1. Создаём новый документ, задаём ему имя и сохраняем как «Книга с поддержкой макросов».

  1. Выделяем примерную область значений, выбираем раздел «Вставка», элемент «Таблица», подтверждаем наличие заголовков.

  1. Заполняем названия заголовков. В моём случае это «Номер», «Заказчик», «Папка», «Название», «Документ» и «Директория».

  1. Приступаем к заполнению столбцов.
  2. Столбец «Номер» заполняется просто. Необходимо ввести в первую строку значение 1, а во вторую – 2, выделить обе заполненные ячейки, зацепиться за маленький чёрный квадратик в правом нижнем углу выделенной области и протащить его вниз на нужное количество строк. В нижних ячейках автоматически проставятся значения от 1 до …(зависит от нас).

  1. Столбец «Заказчик» можно заполнить вручную или способом, описанным для столбца «Название» при условии, что имена заказчиков – это по совместительству названия папок в общей директории.

  1. В столбце «Папка» я хочу видеть адрес папки, в которой располагается конкретный документ и при этом сделать его ссылкой, при нажатии на которую Excel будет перебрасывать меня в эту папку. Для этого я воспользуюсь функцией «ГИПЕРССЫЛКА». Подробнее опишу ниже.
  2. В столбце «Название» мне нужно отобразить имена документов, но вводить их все вручную очень долго. В Excel существует небольшая хитрость, позволяющая в разы ускорить процесс и автоматически заполнить ячейки названиями всех документов, находящихся в указанной папке. Это возможно благодаря функции «Файлы», ищите алгоритм чуть ниже.
  3. Столбец «Документ» будет содержать рабочую ссылку на нужный файл, нажатие на которую спровоцирует его открытие. Как это сделать, ищите чуть ниже.
  4. Столбец «Директория» — это всё тот же адрес папки, но без гиперссылки. Он нужен для того, чтобы заполнить предыдущие столбцы.

Папка

Чтобы получить активный адрес папки, где расположен нужный документ, воспользуемся функцией «Гиперссылка»:

  1. Ставим курсор в первую ячейку соответствующего столбца.
  2. Копируем адрес нужной папки.

  1. Вставляем его сразу в «Директорию», он пригодится в дальнейшем.

  1. Нажимаем в строке значений на fx и находим нужную функцию или вписываем вручную =ГИПЕРССЫЛКА(«адрес папки»).

  1. Ещё один способ, на мой взгляд, самый удобный – щёлкаем в нужной ячейке ПКМ (правой кнопкой мыши), в меню выбираем команду «Гиперссылка», в открывшемся мастере отыскиваем нужную папку и подтверждаем действие.

  1. Так придётся делать для каждого документа, но если учесть, что большое количество их расположено в одной и той же папке, то процесс не должен отнять много времени. Для последующих документов, являющихся соседями первого по директории, адрес можно просто скопировать.

Название

С названием немного сложнее:

  1. Добавляем к адресу, помещённому нами в «Директорию» ещё один обратный слеш и звёздочку, то есть \*.

  1. Выбираем раздел меню «Формулы», функцию «Диспетчер имён».

  1. А в её мастере команду «Создать».

  1. Задаём имя, в моём случае это будет «Название».

  1. В строке «Диапазон» пишем =ФАЙЛЫ( и щёлкаем курсором по соответствующей ячейке в столбце «Директория», закрываем скобку).

  1. Нажимаем ОК и «Закрыть».
  2. Ставим курсор в первую ячейку столбца.
  3. Вписываем туда формулу =ИНДЕКС(Название;СТРОКА()-1), где Название – это имя, заданное нами на четвёртом шаге данного алгоритма, а -1 обозначает, что данная ячейка стоит второй в столбце.
  4. Нажимаем «Энтер» и видим, что в столбце появились имена всех файлов, расположенных в указанной папке.

  1. Таким методом можно поместить в реестр названия не всех файлов, а выборочно в зависимости от формата. Для этого предварительно в адресе папке, указываемом в столбце «Директория», после звёздочки следует написать расширение файла, например, \*docx, xls или jpeg. Это актуально, когда в одной папке находятся вперемешку файлы разных форматов – таблицы, картинки, текстовые документы и любые другие.

Если что-то вам по моим картинкам и описанию не понятно, то посмотрите следующую подробную инструкцию в формате видео.

Документ

Друзья, столбец «Документ» содержит то же название, но являющееся ссылкой. Чтобы этого добиться, следует проделать все те же действия, что и в предыдущем алгоритме до шага 8. Мы их опустим, так как повторно делать одно и то же не нужно. Теперь немного усложняем формулу. Она примет вид =ГИПЕРССЫЛКА(ИНДЕКС(Название;СТРОКА()-1)). После её размещения и ввода строки заполнятся теми же названиями, но являющими собой активные ссылки.

Вот, кажется, и всё. Старался описать алгоритм наиболее подробно. Меня ещё недавно спросили, как создать реестр сведений о доходах физических лиц, то есть формировать справки 2-НДФЛ и вести их учёт в программе «Налогоплательщик ЮЛ». Тема, в общем, та же, но программа другая, поэтому я решил посвятить ей отдельный материал. До скорых встреч.

Ссылка на основную публикацию