Vba excel сохранить как
Решил решить (sory за тавтологию) задачку при помощи макрокодера:
Сохранить изменения в текущем файле (1), сохранить как этот же файл в другой папке (2) с закрытием текущего файла (3) и открыть из новой папки новый файл (4).
Учитывая, что макрокодер не записывает команду Сохранить как (или я не правильно делаю), я пошел длинным путем: записал каждое действие по отдельности + нашел в интернете отдельные макросы и вот что получилось:
[vba]
Можете закидать помидорами, по другому не умею =)
Протестировал каждый макрос по отдельности и затолкал в один макрос.
Затык макроса в моменте когда закрываю текущую книгу и пытаюсь открыть сохраненный как файл. То есть файл не открывается при закрытом файле откуда запущен макрос.
Подскажите, пожалуйста, где ошибаюсь
Решил решить (sory за тавтологию) задачку при помощи макрокодера:
Сохранить изменения в текущем файле (1), сохранить как этот же файл в другой папке (2) с закрытием текущего файла (3) и открыть из новой папки новый файл (4).
Учитывая, что макрокодер не записывает команду Сохранить как (или я не правильно делаю), я пошел длинным путем: записал каждое действие по отдельности + нашел в интернете отдельные макросы и вот что получилось:
[vba]
Можете закидать помидорами, по другому не умею =)
Протестировал каждый макрос по отдельности и затолкал в один макрос.
Затык макроса в моменте когда закрываю текущую книгу и пытаюсь открыть сохраненный как файл. То есть файл не открывается при закрытом файле откуда запущен макрос.
Подскажите, пожалуйста, где ошибаюсь Anis625
Решил решить (sory за тавтологию) задачку при помощи макрокодера:
Сохранить изменения в текущем файле (1), сохранить как этот же файл в другой папке (2) с закрытием текущего файла (3) и открыть из новой папки новый файл (4).
Учитывая, что макрокодер не записывает команду Сохранить как (или я не правильно делаю), я пошел длинным путем: записал каждое действие по отдельности + нашел в интернете отдельные макросы и вот что получилось:
[vba]
Можете закидать помидорами, по другому не умею =)
Протестировал каждый макрос по отдельности и затолкал в один макрос.
Затык макроса в моменте когда закрываю текущую книгу и пытаюсь открыть сохраненный как файл. То есть файл не открывается при закрытом файле откуда запущен макрос.
Подскажите, пожалуйста, где ошибаюсь Автор - Anis625
Дата добавления - 28.02.2019 в 23:21
Попробовал поменять местами последние две команды:
Закрывается Сохраненная как книга, а нужно чтобы она осталась открытой, а исходный файл закрылся
Попробовал поменять местами последние две команды:
Закрывается Сохраненная как книга, а нужно чтобы она осталась открытой, а исходный файл закрылся Anis625
Закрывается Сохраненная как книга, а нужно чтобы она осталась открытой, а исходный файл закрылся Автор - Anis625
Дата добавления - 28.02.2019 в 23:51
ActiveWorkbook - активный файл, а Вам нужно ThisWorkbook - тот файл, в котором находится исполняемый макрос
Но дело даже не в этом. Когда Вы пересохраняете файл в другую папку с помощью SaveAs (а не SaveCopyAs) , то это уже не тот файл, который Вы открыли первоначально, а тот, который в другой папке, сохраненный с SaveAs. Поэтому открывать его еще раз не нужно, он уже открыт. А вот тот файл, из которого Вы запускали макрос - он закрыт. Поэтому Вам нужно только 2 строки кода
[vba]
[/vba]
И да, если Вы закрываете файл, в котором выполняется макрос, то этот макрос тоже закрывается и конечно прекращает свою работу
ActiveWorkbook - активный файл, а Вам нужно ThisWorkbook - тот файл, в котором находится исполняемый макрос
Но дело даже не в этом. Когда Вы пересохраняете файл в другую папку с помощью SaveAs (а не SaveCopyAs) , то это уже не тот файл, который Вы открыли первоначально, а тот, который в другой папке, сохраненный с SaveAs. Поэтому открывать его еще раз не нужно, он уже открыт. А вот тот файл, из которого Вы запускали макрос - он закрыт. Поэтому Вам нужно только 2 строки кода
[vba]
[/vba]
И да, если Вы закрываете файл, в котором выполняется макрос, то этот макрос тоже закрывается и конечно прекращает свою работу _Boroda_
[/vba]
И да, если Вы закрываете файл, в котором выполняется макрос, то этот макрос тоже закрывается и конечно прекращает свою работу Автор - _Boroda_
Дата добавления - 01.03.2019 в 00:10
_Boroda_, благодарю Вас за помощь, получилось именно так как нужно =)
И спасибо Вам за краткий ликбез по макросам
Подскажите, пожалуйста, почему макрокодер не записывает команду Сохранить как? После запуска макрокодера нажимаю сохранить (через иконку), потом Файл-Сохранить как - Выбираю папку - Сохраняю - Заканчиваю запись. Макрос записывает только команду [vba]
_Boroda_, благодарю Вас за помощь, получилось именно так как нужно =)
И спасибо Вам за краткий ликбез по макросам
Подскажите, пожалуйста, почему макрокодер не записывает команду Сохранить как? После запуска макрокодера нажимаю сохранить (через иконку), потом Файл-Сохранить как - Выбираю папку - Сохраняю - Заканчиваю запись. Макрос записывает только команду [vba]
И спасибо Вам за краткий ликбез по макросам
Подскажите, пожалуйста, почему макрокодер не записывает команду Сохранить как? После запуска макрокодера нажимаю сохранить (через иконку), потом Файл-Сохранить как - Выбираю папку - Сохраняю - Заканчиваю запись. Макрос записывает только команду [vba]
Очень часто бывает такое, что нужно сформировать документы по определенному шаблону, на основе каких-то данных, например, по каждому сотруднику или по каждому лицевому счету. И делать это вручную бывает достаточно долго, когда этих самых сотрудников или лицевых счетов много, поэтому сегодня мы рассмотрим примеры реализации таких задач в Excel с помощью макроса написанного на VBA Excel.
Немного поясню задачу, допустим, нам необходимо сформировать какие-то специфические документы по шаблону массово, т.е. в итоге их получится очень много, как я уже сказал выше, например, по каждому сотруднику. И это нужно сделать непосредственно в Excel, если было бы можно это сделать в Word, то мы бы это сделали через «Слияние», но нам нужно именно в Excel, поэтому для этой задачи мы будем писать макрос.
Мы с Вами уже выгружали данные по шаблону через клиент Access из базы MSSql 2008 в Word и Excel вот в этой статье — Выгрузка данных из Access в шаблон Word и Excel. Но сейчас допустим, у нас данные располагаются в базе, в клиенте которой нельзя или слишком трудоемко реализовать такую задачу, поэтому мы просто выгрузим необходимые данные в Excel и на основе таких данных по шаблону сформируем наши документы.
В нашем примере мы, конечно, будем использовать простой шаблон, только для того чтобы это было просто наглядно и понятно (только в качестве примера), у Вас в свою очередь шаблон будет, как мне кажется намного сложней.
Напомню, что на данном сайте тема VBA Excel уже затрагивалась, например, в материале – Запрет доступа к листу Excel с помощью пароля
И так приступим!
Пишем макрос на VBA Excel по формированию документов
Реализовывать нашу задачу будем на примере «Электронной карточке сотрудника» (я это просто придумал:), хотя может такие и на самом деле есть), т.е. документ в котором хранится личные данные сотрудника вашего предприятия, в определенном виде, именно в Excel.
Примечание! Программировать будем в Excel 2010.
И для начала приведем исходные данные, т.е. сами данные и шаблон
Данные.
Лист, на котором расположены эти данные так и назовем «Данные»
Шаблон.
Лист, на котором расположен шаблон, тоже так и назовем «Шаблон»
Далее, нам необходимо присвоить имена полей для вставки, так более удобней к ним обращаться чем, например, по номеру ячейки.
Это делается очень просто, выделяете необходимую ячейку или диапазон, и жмете правой кнопкой мыши и выбираете «Присвоить имя», пишите имя ячейки и жмете «ОК»
Свои поля я назвал следующим образом:
- ФИО – fio;
- № — number;
- Должность – dolgn;
- Адрес проживания – addres;
- Тел. № сотрудника – phone;
- Комментарий – comment.
Код макроса на VBA Excel
Для того чтобы написать код макроса, открывайте на ленте вкладку «Разработчик», далее макросы.
Примечание! По умолчанию данной вкладке в Excel 2010 может и не быть, чтобы ее отобразить нажмите правой кнопкой по ленте пункт меню «Настройка ленты»
затем, в правой области поставьте галочку напротив пункта «Разработчик»
После вкладка разработчик станет отображаться на ленте.
Далее, когда Вы откроете вкладку разработчик и нажмете кнопку «Макросы» у Вас отобразится окно создания макроса, Вы пишите название макросы и жмете «создать».
После у Вас откроется окно редактора кода, где собственно мы и будем писать свой код VBA. Ниже представлен код, я его как обычно подробно прокомментировал:
Теперь осталось выполнить этот макрос, для этого откройте вкладку разработчик->макросы->выполнить наш макрос:
и после выполнения у Вас в той же папке появится вот такие файлы
Вот с таким содержимым:
Для удобства можете на листе с данными создать кнопку и задать ей событие выполнить наш только что созданный макрос, и после чего простым нажатием выполнять этот макрос. Вот и все! Удачи!
Привет, сейчас мы рассмотрим ситуацию, когда у Вас возникла необходимость в Excel сохранять файл с определенным названием, которое необходимо сформировать из значения ячейки или даже нескольких. В этой заметке я приведу простой пример реализации данной задачи.
Исходные данные
Сначала давайте разберем исходные данные, которые я буду использовать в примерах. Пусть это будет некая абстракция марок автомобилей с указанием их VIN номера.
Примечание! Я использую Excel 2013.
В зависимости от конкретных требований и условий, задачу можно реализовать по-разному, хотя принцип будет один и тот же, в этой статье мы рассмотрим несколько вариаций реализации.
Начнем мы с самой простой ситуации, когда заранее известна ячейка, на основе которой будет сформировано имя файла, и адрес этой ячейки изменяться не будет.
Сохранение файла Excel с названием из ячейки — с привязкой к этой ячейке
Итак, данные у нас есть, теперь необходимо написать процедуру на VBA (макрос), которая брала бы значение из конкретной ячейки, в данном случае это будет ячейка B14, и присваивала бы это значение имени файла.
Ниже представлен код процедуры, я его подробно прокомментировал. Единственное скажу, что я во всех примерах сохраняю новые файлы без макросов (расширение .xlsx), т.е. по факту будет один файл с поддержкой макросов, а все производные — без.
Если нужно сохранять макрос в каждом файле, т.е. файлы с поддержкой макросов (расширение .xlsm), то необходимо просто указать другой тип файла при сохранении, а именно xlOpenXMLWorkbookMacroEnabled, в процедурах в комментариях я это указываю.
Открываем в Excel редактор Visual Basic, и вставляем код следующей процедуры в исходный код этой книги (ЭтаКнига, открыть двойным кликом) или в модуль, который Вы предварительно должны создать.
Примечание! Для того чтобы открыть редактор Visual Basic в Excel, необходимо перейти на вкладку «Разработчик» и нажать на кнопку «Visual Basic». Файл Excel с кодом процедуры необходимо сохранить с типом «Книга Excel с поддержкой макросов».
Код процедуры
После сохранения файла запустите макрос («Макросы -> Выполнить -> SaveFile»).
Добавление кнопки в Excel для запуска макроса
Каждый раз открывать окно с макросами и выбирать нужный макрос не очень удобно, поэтому можно легко добавить кнопку где-нибудь рядом с данными и просто нажимать ее. Это делается следующим образом «Вкладка Разработчик -> Вставить -> Кнопка (элемент управления формы)».
Затем выберите место, где вставить кнопку, и нажмите туда. После этого появится окно назначения действия, т.е. нужно выбрать, какой макрос запускать при нажатии этой кнопки, выбираем наш макрос, т.е. SaveFile, и нажимаем «ОК».
В итоге появится кнопка с названием «Кнопка», это название лучше изменить, например, на «Сохранить файл». Для этого нажмите правой кнопкой мыши на кнопку и выберите настройки «Изменить текст». В итоге у Вас должно получиться что-то вроде этого.
Сохранение файла Excel с названием из ячейки — без привязки к ячейке
Теперь давайте представим, что заранее мы не можем определить, какая именно ячейка будет формировать название файла (может B14, а может и нет), поэтому мы можем немного скорректировать алгоритм таким образом, чтобы он брал значение из ячейки, которая является активной, но в этом случае Вы, конечно же, предварительно, должны выбрать ее (т.е. встать на нее).
Замените код процедуры следующим кодом, который совсем немного, но изменен.
Проверяем работу, становимся на нужную ячейку, и запускаем макрос (в процедуре я добавил проверку, если выбрана пустая ячейка, возникнет ошибка).
Как видим, все отработало.
Сохранение файла Excel с названием, которое сформировано из значений двух ячеек
Теперь представим, что нам нужно сформировать файл с названием из значений двух ячеек. Например, в нашем случае это может быть «Марка Авто – VIN Номер», в качестве разделителя я указал символ – (дефис), но им может выступать любой символ или вовсе отсутствовать.
В этом примере я покажу, как можно это реализовать с привязкой к конкретным ячейкам, в нашем случае B14 и D14.
Код процедуры в данном случае будет выглядеть следующим образом.
Все ОК, файл создан.
Если вдруг нужно реализовать без привязки к конкретным ячейкам, например, значения хранятся в определённых столбцах, но конкретная строка неизвестна Вам заранее. Например, у меня несколько строк со значениями, и какие конкретно значения взять за основу названия файла, я хочу указывать самостоятельно, непосредственно перед сохранением, но при этом не редактировать код процедуры.
Для этого мы снова внесем изменения в нашу процедуру, которая будет работать от активной ячейки (смещение от активной ячейки), только с условием того, что выбран столбец с теми значениями, которые необходимо использовать.
Код процедуры
Становитесь на любую ячейку со значением в столбце B, и запускайте макрос.
У меня есть книга Excel, которая при нажатии кнопки формы я хочу сохранить копию книги с именем файла, являющимся текущей датой.
Я пытаюсь следующее ActiveWorkbook.SaveAs ("filePathFormFlow To MSExcel" & Left(Now(), 10)) но получив Run-time error '1004': Method 'SaveAs' of object'_Workbook' failed.
может кто-нибудь помочь мне с этим? Я все еще очень новичок в разработке для Excel.
скорее всего, путь, к которому вы пытаетесь получить доступ, не существует. Кажется, вы пытаетесь сохранить в относительном месте, и у вас нет расширения файла в этой строке. Если вам нужно использовать относительные пути, вы можете проанализировать путь из ActiveWorkbook.FullName
изменить: Лучшим синтаксисом также будет
самый простой способ использовать эту функцию-начать с "записи макроса". Как только вы начнете запись, сохраните файл в нужном месте с нужным именем, а затем, конечно, установите тип файла, скорее всего, "Excel Macro Enabled Workbook" ~ "XLSM"
остановить запись, и вы можете начать проверку кода.
Я написал код ниже, который позволяет сохранить книгу, используя путь, где файл был первоначально расположен, назвав его как " событие [дата в ячейке "А1"]"
скопируйте код в новый модуль, а затем напишите дату в ячейке" A1", например 01-01-2016 -> назначьте sub кнопке и запустите. [Примечание] вам нужно сделать файл сохранения, прежде чем этот скрипт будет работать, потому что новая книга сохраняется в папку автосохранения по умолчанию!
возможно, ваш формат по умолчанию не соответствует расширению файла. Вы должны указать формат файла вместе с именем файла, убедившись, что формат соответствует расширению:
OTOH, я не вижу расширения на вашем .Сохранить как имя файла. Возможно, вам нужно предоставить его при выполнении этого программно. Это имеет смысл-не нужно предоставлять расширение из интерфейса GUI удобно, но мы, программисты, должны писать однозначный код. Я предлагаю добавление расширения и соответствующего формата. См.эта страница msdn для списка форматов файлов. Честно говоря, я не узнаю много о descripions.
xlExcel8 = 56-это .формат xls
xlExcel12 = 50-это .файл xlsb формате
xlOpenXMLWorkbook = 51 является .формат xlsx
xlOpenXMLWorkbookMacroEnabled = 52 является .формата xlsm
xlWorkbookDefault является и указан со значением 51, что озадачивает меня, так как я думал, что формат по умолчанию может быть изменен.
Я знаю, что это старый пост, но я искал что-то подобное. Я думаю, ваша проблема заключалась в том, что при использовании Now () выход будет "6/20/2014". Это проблема для имени файла, поскольку в нем есть"/". Как вы знаете, нельзя использовать определенные символы в имени файла.
Про сборку листов из нескольких книг в одну текущую я уже писал здесь. Теперь разберем решение обратной задачи: есть одна книга Excel, которую нужно "разобрать", т.е. сохранить каждый лист как отдельный файл для дальнейшего использования.
Примеров подобного из реальной жизни можно привести массу. Например, файл-отчет с листами-филиалами нужно разделить на отдельные книги по листам, чтобы передать затем данные в каждый филиал и т.д.
Если делать эту процедуру вручную, то придется для каждого листа выполнить немаленькую цепочку действий (выбрать лист, правой кнопкой по ярлычку листа, выбрать Копировать, указать отдельный предварительно созданный пустой файл и т.д.) Гораздо проще использовать короткий макрос, автоматизирующий эти действия.
Способ 1. Простое разделение
Нажмите сочетание Alt+F11 или выберите в меню Сервис - Макрос - Редактор Visual Basic (Tools - Macro - Visual Basic Editor) , вставьте новый модуль через меню Insert - Module и скопируйте туда текст этого макроса:
Если теперь выйти из редактора Visual Basic и вернуться в Excel, а затем запустить наш макрос (Alt+F8), то все листы из текущей книги будут разбиты по отдельным новым созданным книгам.
Способ 2. Разделение с сохранением
При необходимости, можно созданные книги сразу же сохранять под именами листов. Для этого макрос придется немного изменить, добавив команду сохранения в цикл:
Этот макрос сохраняет новые книги-листы в ту же папку, где лежал исходный файл. При необходимости сохранения в другое место, замените wb.Path на свой путь в кавычках, например "D:\Отчеты\2012" и т.п.
Если нужно сохранять файлы не в стандартном формате книги Excel (xlsx), а в других (xls, xlsm, xlsb, txt и т.д.), то кроме очевидного изменения расширения на нужное, потребуется добавить еще и уточнение формата файла - параметр FileFormat:
Для основных типов файлов значения параметра FileFormat следующие:
- XLSX = 51
- XLSM = 52
- XLSB = 50
- XLS = 56
- TXT = 42
Способ 3. Сохранение в новые книги только выделенных листов
Если вы хотите раскидать по файлам не все листы в вашей книге, а только некоторые, то макрос придется немного изменить. Выделите нужные вам листы в книге, удерживая на клавиатуре клавишу Ctrl или Shift и запустите приведенный ниже макрос:
Создавать новое окно и копировать через него, а не напрямую, приходится потому, что Excel не умеет копировать группу листов, если среди них есть листы с умными таблицами. Копирование через новое окно позволяет такую проблему обойти.
Способ 4. Сохранение только выделенных листов в новый файл
Во всех описанных выше способах каждый лист сохранялся в свой отдельный файл. Если же вы хотите сохранить в отдельный новый файл сразу группу выделенных предварительно листов, то нам потребуется слегка видоизменить наш макрос:
Способ 5. Сохранение листов как отдельных PDF-файлов
- для этого используется уже другой метод (ExportAsFixedFormat а не Copy)
- листы выводятся в PDF с параметрами печати, настроенными на вкладке Разметка страницы (Page Layout)
- книга должна быть сохранена на момент экспорта
Нужный нам код будет выглядеть следующим образом:
Способ 6. Готовый макрос из надстройки PLEX
Если лень или нет времени внедрять все вышеописанное, то можно воспользоваться готовым макросом из моей надстройки PLEX:
Читайте также: