- Сохранить как — метод «Сохранить как» – Excel VBA
- Видеокурсы по Excel
- Ъпо воде
- Что делает метод SaveAs
- Сохранить как
- Синтаксис 1 для листа
- Синтаксис 2 для рабочей книги (Workbook)
- Описание параметра
- Типы файлов — Формат файла
- Простой пример
- Более сложные примеры
- Сохранить с паролем
- Сохраненные выбранные листы
- Сохранить с датой
- Сохранить с датой + именем ячейки
- Дополнительные коды
- Определение подходящего формата
- Диалоговые окна
- Сохраняется под другими именами — csv, txt, pdf
- Проблемы с сохранением
- Команды, аналогичные команде Сохранить как
- Сохранить копию как
- Закрытая книга
- Сохранить эту книгу
- Сохраните копию книги
- Сохранить как отдельный лист(ы)
- Отдельные листы
- Для скачивания
- Всего
- Если
- Павел Ласбк — автор сайта
- Комментарии
- РоманП
- Павел Ласбак
- Джон В.
- Павел Ласбак
- Джон В.
- Павел Ласбак
- Джон В.
- Павел Ласбак
- Джон В.
- Павел Ласбак
- Джон В.
- Питер Г
- Павел Ласбак
- Питер .Ф.
- Павел Ласбак
- Павел Хурт
- Пол
- Павел Хурт
- Павел Ласбак
- Джейкоб
- Житка
- Дэвид
- Ростислав
- Томаш
- Восхождение
- Восхождение
Сохранить как — метод «Сохранить как» – Excel VBA
Видеокурсы по Excel
В сотрудничестве с SEDUO я создал несколько видеокурсов:
- Как работать с Excel – научитесь эффективно использовать Excel – самый популярный ( рейтинг 97 %, более 13 000 студентов, + 750 положительных отзывов ) – Получить курс
- MaxiCourse Excel – получите лучшую работу, больше денег, станьте незаменимым ( более 6 часов просмотра, 160 уроков ) – Получить курс
- G-таблицы. — если не нравится Excel, воспользуйтесь курсом на Google-таблицах
Как использовать макросы VBA в Excel для сохранения в xlsx, xlsm. Сложности, возможные проблемы, как с ними справиться. Чтение параметров, подбор паролей.
Ъпо воде
Список глав в этой статье:
Что делает метод SaveAs
?
Если вам нужно сохранить файл с помощью VBA. Ответ на классический вопрос Сохранить как
Внимание: При выполнении этого метода файл будет сохранен под указанным именем, и вы начнете работать в этом новом файле!
Спасибо за информацию Петр Ф.
Сохранить как
Синтаксис метода
Синтаксис 1 для листа
Синтаксис 2 для рабочей книги (Workbook)
Описание параметра
- Имя файла — Обязательно — Строка (Рабочий лист), Необязательно — Вариант (Рабочая книга) — если не указан полный путь, он будет сохранен в текущей папке (каталоге)
- FileFormat — Необязательно — Variant — тип сохраняемого файла, см. ниже, где перечислены типы — например, XlFileFormat
- Пароль — Необязательно — Вариант — Пароль (макс. 15 символов)
- WriteResPassword — Необязательно — Вариант — Пароль для записи.
- ReadOnlyRecommended — Необязательно – Вариант — для файла только для чтения
- CreateBackup — Необязательно — Вариант — Если необходимо создать резервную копию = TRUE
- Режим доступа — Необязательно — Вариант —
- Разрешение конфликтов — Необязательно — Вариант —
- AddToMru — Необязательно — Вариант —
- TextCodePage — Необязательно – Вариант – не используется в США. Английский Excel
- TextVisualLayout — Необязательно — Вариант — не используется в США. Английский Excel
- Локальный — Необязательный — Вариантный — ИСТИНА — Excel учитывает национальные настройки в панели управления (центр настроек) — я покажу больше в примерах, где это более наглядно.
Типы файлов — Формат файла
Типы файлов (например, таблица XlFileFormat) вместе с их кодом:
- 51 — xlOpenXMLWorkbook — без макроса xlsx
- 52 — xlOpenXMLWorkbookMacroEnabled — с макросом xlsm
- 50 — xlExcel12 -binary xlsb
- 56 — xlExcel8 — xls (версия 97 – 2003)
Другие важные файлы csv, txt, pdf .
- -4158 — текст
- 6 — CSV
- 36 — прн
- —
И еще один полный список в отдельной статье
Простой пример
Мы начнем с совершенно простого примера
Появится диалоговое окно о том, что файл уже сохранен под тем же именем (если вы уже сохранили его ранее). Или информация о том, что ее нельзя сохранить, потому что рабочая книга содержит макросы (вы ее еще не сохранили) и имя по умолчанию, присвоенное новой книге Excel (Workbook 1.xlsx).
Сохраните файл под именем MyFile.xlsm .
Более сложные примеры
Сохранить с паролем
Сохраненные выбранные листы
Сохранить с датой
Текущая дата и время будут вставлены в имя
ActiveWorkbook.SaveAs Filename:=»D:\test\Report» & Формат (теперь «ггггммдд») & «.xlsm»
Сохранить с датой + именем ячейки
Сохранить с датой и выбрать имя, набравзначения в ячейку A1 и в ячейку A2.
FName = Sheets(«Лист1»).Range(«A1»).Text FDocument = Sheets(«Лист1»).Range(«A2»).Text NameDate = FName & Документ & Формат(Теперь «ггггммдд»)
Улучшено редактирование сохраненного файла.
NameDatum = FName & «-» & Документ & «_» &Формат(Теперь «ггггммдд») & «.xlsm», формат файла:=52
Дополнительные коды
Добавить и расширить код VBA.
Определение подходящего формата
Проверьте, содержит ли книга макросы.
If .HasVBProject Then Result = «.xlsm» Else Result = «.xlsx» End If
Диалоговые окна
Отключено отображение системных сообщений.
С приложением .ScreenUpdating = False .EnableEvents = False End With
Вновь включите отображение системных сообщений, иначе вы не обнаружите возможные ошибки (не отображаются) в других частях программы.
С приложением .ScreenUpdating = True .EnableEvents = True End With
Сохраняется под другими именами — csv, txt, pdf
Как сохранить pod в csv, txt, pdf будет предметом других статей. Как сохранить книгу Excel в *.pdf, я написал в статье Печать в *.pdf — макрос Excel VBA.
Проблемы с сохранением
Проблемы с хранилищем. Вы сохраняете под именем файла, который уже открыт и не может быть записан, папка недоступна, лист содержит макросы, которые нельзя сохранить в *.xlsx, вам нужно сохранить в более старой версии, и у вас форматирование, которое старая версия не поддерживает и т.д.
Команды, аналогичные команде Сохранить как
Еще один способ сохранить — создать копию с помощью SaveCopyAs. Если комментарии будут интересны, я постараюсь расширить и эту главу.
Сохранить копию как
Закрытая книга
Сохранить эту книгу
Сохраните копию книги
Сохраните копию записной книжки с выбранным именем и датой.
FPath = «C:\document» FName =Листы («Лист1»). Диапазон («A1»). Текст FNumber = Листы («Лист1»). Диапазон («A2»). Текст ИмяДата = FName & FNumber & Формат (теперь «дд.мм.гггг») ThisWorkbook.SaveCopyAs Имя файла:=FCesta & «\» & ИмяДата & «.xlsx» Конец Sub
Примечание: это другой метод, поэтому он не должен содержать «FileFormat:=51».
Сохранить как отдельный лист(ы)
Как сохранить только один лист, например Аквивнн.
ActiveSheet.Copy ActiveWorkbook.SaveAs Имя файла:=»C:\MyFolder\MySubFolder\Test.xls» ActiveWorkbook.Close
Совет не спрашивать о сохранении:
Отдельные листы
Если мне нужно извлечь отдельные листы (например, имена людей и их результаты, которые находятся на отдельных листах).
Dim sh As Worksheet For Each sh In Worksheets sh.Copy ‘ at не запрашивает подтверждение сохранения Application.DisplayAlerts = False ‘ имена отдельных рабочих листов в соответствии с именем листов ‘ Совет: у вас может быть условие если имя листа начинается с: xy* ActiveWorkbook .SaveAs Filename:=»D:\smaz\» & sh.Name & «.xlsx» Application.DisplayAlerts = True ‘если я хочу сохранить и эту книгу ActiveWorkbook.Close Savechanges:=False Next
Для скачивания
Файл как сохранить в VBA с помощью SaveAs (SaveCopyAs) для бесплатной загрузки. В файле используются макросы.
При необходимости я буду постепенно добавлять коды VBA.
Всего
Есть комментарии к любой дополнительной статье.
Статья обновлена: 19.09.2020 11:07
Если
Помог ли этот веб-сайт сэкономить вам время и деньги? Помог ли он решить проблему? Готовы ли вы предоставить символическое вознаграждение за дальнейшее развитие? Выберите форму вознаграждения, которая вам подходит.
Павел Ласбк — автор сайта
Microsoft Office (Word, Excel, Google Sheets , PowerPoint) с 2000 г. (с 2004 г. на этомдомен) — В 2017 году я получил престижную награду MVP от Microsoft (пока я единственный от ИР в категории Excel). Я также делюсь своими знаниями и опытом онлайн в видеороликах для SEDUO . В компаниях преподаю и консультирую , работаю в МУНИ. Я создаю этот сайт более 15 лет. Существует более 1000 бесплатных инструкций, советов и рекомендаций, включая более 250 различных шаблонов и рабочих книг.
Комментарии
РоманП
Добавлено: 25.09.12 16:27
Здравствуйте, я экселиста-самоучка, но я сделал форму для заказов, где название формы всегда состоит из данных в форме (год, месяц, день и название заказа). Это имя находится в одной заданной ячейке. Можно ли сделать макрос, когда заполненная форма сохраняется в новой книге с этим именем после нажатия кнопки печати (выход)? Спасибо за совет.
Павел Ласбак
Добавлено: 25.09.12 18:24
To RomanP: используйте Workbook.SaveAs, где имя файла будет именем данной ячейки (например, A1). Sub SaveAsName() Dim FName As String Dim FPath As String FPath = «C:\attempts» FName = Sheets(«Sheet1»).Range(«A1»).Text ThisWorkbook.SaveAs Filename:=FPath & «\» & FName End Sub
Джон В.
Добавлено: 27.01.13 07:18
Здравствуйте, я хотел бы получить совет, как сохранить копию листа с помощью команды, которая указана в разделе «Сохранить с датой», чтобы в имени не было слова «Отчет», а была ссылка на конкретную ячейку в листе. 1. Например, из Sheet1 & A1 и усилитель; B3 и усилитель; дата
Павел Ласбак
Добавлено: 27.01.13 07:43
To HonzaV: В статье выше сказано, что повторение — мать мудрости 😉 использовать функцию NYNН() в VBA нужно СЕЙЧАС вводить на английском языке FCesta = «D:\pokusy» FName = Sheets(» Sheet1″).Range(«A1»).TextNameDatum = FName & Формат(Теперь «ггггммдд») ThisWorkbook.SaveAs Имя файла:=FCesta & «\» & ИмяДата &».xlsm», формат файла:=52 формат файла:=52 . сохранить файл как xlsm (т.е. файл с макросами). Только за доп. Или используя СЕГОДНЯ() NameDate = FName & Format$(Date, «mm-dd-yyyy») PS: Не проверяет, существует ли папка, существует ли уже файл с таким именем, не открыт ли он и т.д.
Джон В.
Добавлено: 27.01.13 10:52
Большое спасибо за вашу помощь. Я понял эту часть, но я не знаю, как добавить второе значение из второй ячейки к именованию. Для уточнения: мне нужно сохранить заполненный счет, где я хотел бы сохранить дату, номер документа и имя. Дата будет написана с помощью вашего макроса, будет написан номер счета. A1, но я не знаю, как добавить второе значение из ячейки A2.
Павел Ласбак
Добавлено: 27.01.13 11:59
Кому Honza V: добавление окончено & см. образец FName = Sheets(«Лист1»).Range(«A1»).Text FDocument = Sheets(«Лист1»).Range(«A2»).Text NameDate = FName & Документ & Формат (теперь «ггггммдд»), при необходимости добавьте к имени дополнительные символы, например, запятые NameDatum = FName & «-» & Документ & «_» &Формат(Теперь «ггггммдд») & «.xlsm», формат файла:=52
Джон В.
Добавлено: 27.01.13 17:27
Спасибо, все понял и все работает как надо. У меня есть еще одна проблема. Лист с накладной, который я сохраняю в папке накладных, перезаписывает имя всей тетради, а когда мне нужно сохранить всю тетрадь, она автоматически сохраняется в последней накладной (могу добавить путь и оригинальное имя вручную). Мне нужно, чтобы вся книга была сохранена в исходной папке, потому что у меня есть другие данные в других листах, которые я добавляю постепенно, и мне нужно, чтобы они были сохранены. Запиши это. о коносаменте и т.д.
Павел Ласбак
Добавлено: 27.01.13 18:41
В Honza V: Сохранить как копию (см. информацию выше) отличаетсяметод SaveCopyAs Синтаксис: SaveCopyAs(Filename), поэтому он сохраняется, например: ThisWorkbook.SaveCopyAs Filename:=FCesta & «\» & ИмяДата & «.xlsm» не должен быть FileFormat:=52
Джон В.
Добавлено: 27.01.13 19:18
Sub save() FPath = «C:\Documents and Settings\Placha\s» FName = Sheets(«Лист1»).Range(«A1»).Text FNumber = Sheets(«Лист1″).Range(» A2″).TextNameDatum = FName & FNumber & Формат (теперь «дд.мм.гггг») ThisWorkbook.SaveCopyAs Имя файла:=FCesta & «\» & ИмяДата & «.xlsx», FileFormat:=51 End Sub Это весь макрос, но при запуске первая строка помечается желтым цветом с помощью Sub save() и FileFormat помечается. Сообщение о переходе: ошибка компиляции: именованный аргумент не найден
Павел Ласбак
Добавлено: 27.01.13 21:23
Для Honza: «FileFormat:=51» не должно быть, см. предыдущий комментарий. Где синтаксис + пример и примечание, что так быть не должно 😉 Sub save() FPath = «C:\Documents and Settings\Plocha\s» FName = Sheets(«Лист1»).Range(«A1» ).Text FNumber = Sheets(«Лист1»).Range(«A2»).Text NameDate = FName & FNumber & Формат (теперь «дд.мм.гггг») ThisWorkbook.SaveCopyAs Имя файла:=FCesta & «\» & ИмяДата & «.xlsx» Конец Sub
Джон В.
Добавлено: 27.01.13 21:41
Спасибо, все работает на 100%. Я не понял примечание о FileFormat. Я подумал, что не стоит писать там 52, но я могу использовать другое обозначение. Я уже знаю, что нет никакого формата. Я действительно просто пользователь. Еще раз спасибо за вашу помощь.
Питер Г
Добавлено: 22.02.13 05:53
Здравствуйте, мистер Ласак. Не могли бы вы прикрепить файл в качестве образца? Я продолжаю бороться с этим, и я не могу этого сделать. Решаю первую задачу (см. RomanP) с сохранением имени файла по содержимому ячейки. Большое спасибо.
Павел Ласбак
Добавлено: 23.02.13 09:22
ЭтоПетр Г: Ну, файл прилагается. Добавил образец в статью. Речь идет только о сохранении (используя SaveAs и SaveCopyAs) с паролем, без пароля, фиксированным именем, именем из ячейки, именем, дополненным временем.
В примерах больше не проверяется существование папки, возможность записи в папку, не открыт ли файл для записи и т. д.
Питер .Ф.
Добавлено: 25.02.13 13:41
Что касается темы, я просто хочу сказать, что если вы выполняете метод «SaveAS», вы автоматически работаете с новым файлом! Он отличается от «SaveCopyAs», где можно определить «Формат файла» (например, html, pdf. ). Лучше всего видеть это шаг за шагом в отладке. Если вы продолжите писать на VBA, вы уже находитесь в другом файле! Из статьи это не совсем понятно. В противном случае, это очень ценный WEB для меня. Спасибо, Павел.
Павел Ласбак
Добавлено: 25.02.13 20:30
Петру Ф.: Спасибо за дополнение. Я также добавил в статью, чтобы другим читателям было понятнее, как работает метод «Сохранить как». Я рад, что сайт помогает.
Павел Хурт
Добавлено: 21.03.13 16:00
Здравствуйте, г-н Ласак, как я могу написать сценарий, чтобы пользователь выбирал папку для сохранения копии, а не предопределял ее. Я хотел бы использовать SaveCopyAs, где будет определен формат PDF. А имя файла будет состоять из имени (для таблицы) и даты (тоже из таблицы). Большое спасибо за полезные страницы, я как самоучка очень это ценю.
Пол
Добавлено: 21.03.13 16:15
И еще один момент, как мне установить saveAs — saveAs только для определенного листа, а не для всей книги? Спасибо, спасибо
Павел Хурт
Добавлено: 22.03.13 10:01
Здравствуйте, сохраненный файл PDF в вашем образце книги всегда не читается. Вы не знаете, где может быть ошибка, я хотел бы использовать эту опцию в своем блокноте (см. выше).
Павел Ласбак
Добавлено: 22.03.13 20:23
Павелу Хёрту: Я отредактировал образец файла. Работает после тестовсоздание *.pdf без проблем.
Для более подробной информации об экспорте в *.pdf я написал статью об экспорте в *.pdf
Джейкоб
Добавлено: 29.03.13 18:21
Здравствуйте, я хотел бы спросить, можно ли при сохранении Excel в формате xlsm с использованием кода на VBA (см. выше) сделать так, чтобы код, написанный в разделе ThisWorkbook, также был скопирован (я копирую код только из листы). Спасибо
Житка
Добавлено: 17.10.13 11:38
Спасибо за различные советы, мне нужно сохранить данные из таблицы QueryTable, загруженной на лист Excel, или вообще область листа, где есть какие-то данные, в текстовый файл. Спасибо за советы
Дэвид
Добавлено: 11.11.13 11:37
Здравствуйте, Копинг по вашей инструкции работает без проблем. Сохраните лист как новый с собственным именем прямо в папке. Проблема у меня в том, что формула сохраняется, а хотелось бы как значения и так же как установлен фильтр.
Ростислав
Добавлено: 10.02.14 14:50
Здравствуйте, я хотел бы сохранить в формате pdf в Excel 2010, это работает для меня, но у меня есть 3 документа на странице на одном листе, и мне нужно будет сохранить только один документ за раз, а тот, который я хочу. Что-то вроде области печати при печати. Его можно выбрать при сохранении в формате . я думаю
Томаш
Добавлено: 15.04.14 07:11
Здравствуйте, хотелось бы совета по макросу. У меня есть файл «контролла.xls», где в ячейке «Е2» у меня серийный номер, например: «001». Мне нужно составить макрос, который сохранит данную книгу в четко указанной папке (например: C:\KONTROLA\) как копию, которая будет иметь имя «E2″&DDMMYY. У меня все это получается, но после сохранения я в основном в сохраненном excel. Мне нужно, чтобы он сохранялся в фоновом режиме, но оригинальный excel «kontrolla.xls» все еще оставался открытым. Мне также нужно, чтобы данное значение в ячейке «E2» увеличивалось при каждом сохранении.один. Кнопка сохранения должна работать только в том случае, если ячейка «G8» имеет «хорошее» значение. Я самоучка excel, мне очень весело, но как-то я не знаю, как это сделать. p.s. У меня Excel 2003. Заранее спасибо за ваше время. ТВ
Добавлено: 01.08.15 11:11
Здравствуйте, мне бы хотелось посоветовать, как сделать файл CSV из Excel? это невозможно сделать в правильном формате для экспорта в интернет-магазин. Спасибо за совет и помощь. Спасибо, Петр Брно
Добавлено: 01.09.15 08:32
Является ли Петр: — использования «Сохранить как» недостаточно? + в окне «Тип файла» выберите: «CSV(MS-DOS)(*csv)»
Восхождение
Добавлено: 03.06.15 07:17
Привет, это не совсем относится к методу «Сохранить как», но речь идет о сохранении файла «Сохранить как». И поскольку это может быть кому-то полезно, почему бы не попробовать 🙂 В рабочей книге (которая «как» шаблон мечты без данных) Я редактирую/обновляю таблицы, другие пользователи добавляют данные. Итак, xlt или проверенное свойство файла «Только для чтения» снова для меня неприятность (обновления довольно частые), но я использовал «Private Sub Workbook_Open()», где пользователи, у которых есть файл, могут быть определенная запись и другие имеют один и тот же файл только для чтения.Но это все равно сохранит любую возможную копию для других пользователей как доступную только для чтения, поэтому я подумал: решать, когда/кому файл открывать для чтения и когда/кому создавать это для записи в Module1: [code]Sub Auto_Open() Dim strUser As String strUser = Environ(«USERNAME») Select Case strUser ‘Full Access Case Is = «user login with full access» If ActiveWorkbook.ReadOnly Then _ ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, WritePassword: =»admin» ‘Случай ограничения доступа <> «вход пользователя с полным доступом» Если не ActiveWorkbook.ReadOnly Then _ ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly,WritePassword:=»admin» End Select End Sub[/code] и для этого создайте Module2, который в случае открытого файла «только для чтения» (т.е. любого, кроме меня) предложит «сохранить как» и при этом time снимите ограничения с Module1 в этой сохраненной копии и пролистайте друг за другом (это удалит оба модуля в созданной копии) [code]Sub Auto_Close() Dim strUser As String strUser = Environ(«USERNAME») Select Case strUser Case Is < ;> «Вход пользователя с полным доступом» Если strUser = Environ («ИМЯ ПОЛЬЗОВАТЕЛЯ»), то затемнить vbCom как набор объектов vbCom = Application.VBE.ActiveVBProject.VBComponents vbCom.Remove VBComponent:=vbCom.Item («Module1») vbCom.Remove VBComponent: =vbCom.Item(«Module2») End If End Select End Sub[/code] Что ж, я немного попотел с Module2. Условие должно было быть, если это я, ничего не делать, иначе удаляйте модули. Это, наконец, прижилось, но это немного нелогично (для моего мозга). в любом случае я не профессионал, конечно можно и лучше. Так что относитесь к этому с недоверием.
Восхождение
Добавлено: 03.06.15 09:48
[код], так что теперь я понятия не имею, почему это не сработало в предыдущем посте «код» — прошу прощения. [/код]