Данный макрос позволяет упростить процедуру сохранения активного листа в книге Excel в отдельный файл.
Для использования этого макроса на любом листе в книге Excel создайте кнопку, и назначьте ей макрос СохранитьЛистВФайл.
При запуске макроса (нажатии кнопки) будет выведено диалоговое окно выбора имени для сохраняемого файла, после чего текущий лист будет сохранён под заданным именем в выбранной папке.
Сохранение производится в формате XLS (формат Excel 2003)
Если пользователь отказался от ввода имени файла (нажал клавишу ESC или кнопку «Отмена» в диалоговом окне),
то сохранения листа в файл не происходит.
Sub СохранитьЛистВФайл() On Error Resume Next ' название подпапки, в которую по-умолчанию будет предложено сохранить файл Const REPORTS_FOLDER = "Отчёты\" ' создаём папку для файла, если её ещё нет MkDir ThisWorkbook.Path & "\" & REPORTS_FOLDER ' выбираем стартовую папку ChDrive Left(ThisWorkbook.Path, 1): ChDir ThisWorkbook.Path & "\" & REPORTS_FOLDER ' вывод диалогового окна для запроса имени сохраняемого файла Filename = Application.GetSaveAsFilename("отчёт.xls", "Отчёты Excel (*.xls),", , _ "Введите имя файла для сохраняемого отчёта", "Сохранить") ' если пользователь отказался от выбора имени файла - отменяем сохранение листа в файл If VarType(Filename) = vbBoolean Then Exit Sub ' копируем активный лист (при этом создаётся новая книга) Err.Clear: ActiveSheet.Copy: DoEvents If Err Then Exit Sub ' произошла какая-то ошибка при попытке копирования листа ' убеждаемся, что активной книгой является копия листа If ActiveWorkbook.Worksheets.Count = 1 And ActiveWorkbook.Path = "" Then ' сохраняем файл под заданным именем в формате Excel 2003 ActiveWorkbook.SaveAs Filename, xlWorkbookNormal ' закрываем сохранённый файл ' (удалите следующую строку, если закрывать созданный файл не требуется) ActiveWorkbook.Close False End If End Sub
PS: Кто-то может сказать, что для сохранения листа в файл в объектной модели Excel есть метод SaveAs, применимый к объекту Worksheet.
Но, как ни странно, выполнение кода ActiveSheet.SaveAs "<имя файла>" приводит к сохранению книги целиком, что равносильно использованию кода ActiveWorkbook.SaveAs "<имя файла>"
Почему этот метод сохранения работает так нелогично - лично мне не понятно (видимо, Microsoft что-то там перемудрил)
Комментарии
галочку снял чтобы показывало расширение и при сохранении внизу показывает xlsx, но сохраняет все равно как файл без раширения... Удалить лишние столбцы вы имеете ввиду вручную? если нет, можно примерчик? очень благодарен вам за ответы.
Что значит «без формата»? То, что вы не видите расширение XLSX у созданного файла?
Так, может, у вас отображение расширений файлов в Windows отключено?
Всё можно задать, - например, удалив лишние столбцы после создания копии листа.
Я так и прописал, все равно сохраняет файл без формата...
Я имел ввиду можно ли как то задать какие колонки сохранять?
По формату сохранения файлов: достаточно было чуть-чуть пролистать страницу вниз, чтобы увидеть решение:
http://excelvba.ru/code/SaveActiveSheet#comment-1460
Причем тут ячейки и фильтры - не понял.
Макрос сохраняет копию листа, в том виде, в каком он отображается на экране.
(если установлены фильтры - лист с этими фильтрами и сохранится)
Добрый день, вопрос следующий! Как сохранить excel в формате xlsx и сохранить ячейки отобранные после фильтра? Прошу прощения, если задавался вопрос, не получилось поменять формат, сохраняет файл не определяя что он excel(
Подскажите, как добавить проверку на внесение изменений. Чтобы лишний раз не сохранять, если не были внесены изменения, а просто закрывать.
Спасибо. А если нужно указать конкретный диапазон ячеек?
Надо перед строкой
дописать код удаления пустых строк, который можно взять здесь:
http://excelvba.ru/code/ConditionalRowsDeleting
Добавляемый код будет выглядеть примерно так:
(будут удалены строки, в которых ни одна ячейка не заполнена)
Здравствуйте. Помогите, пожалуйста. Что нужно написать в вашем макросе, чтобы в копии файла (листа) пустые строки были скрыты (или удалялись)? Спасибо.
Я не Владимир, но отвечу)
Если у вас Excel 2007 (или новее), то делается то просто - вместо расширения XLS ставите везде XLSX,
и меняете константу xlWorkbookNormal на xlOpenXMLWorkbook
' сохраняем файл под заданным именем в формате Excel 2007 (без макросов) ActiveWorkbook.SaveAs Filename, xlOpenXMLWorkbook
Владимир, добрый день!
Может Вы и уже такой вариант где-то описали, но не нашёл пока: как сохранить всю книгу без макросов?
3) - тут вопрос был вот в чем: что кнопка находится на листе 1, а надо сохранить указанные листы 2 и 3, а не текущий лист. А за остальное, конечно большое спасибо
Владимир, с вопросами лучше обращаться на форумы по Excel,
а ко мне - только с оплачиваемыми заказами)
1) задать путь к папке можно так:
2) Ну так присвойте переменной сразу нужное имя, без лишних диалоговых окон:
Filename = Folder & "Ваше имя файла.xls"
3) а в чем, собственно, вопрос?
Итого получится что-то вроде такого:
Спасибо, это работает. Возникли еще парочка вопросов: 1) с помощью этого мы указываем путь, где будет сохранен файл
' путь к папке, в которую по-умолчанию будет предложено сохранить файл
Folder$ = "D:\": MkDir Folder$
ChDrive Left(Folder$, 1): ChDir Folder$ ' выбираем стартовую папку
как сделать так чтобы файл сохранялся по адресу "D:\папка" где название "папка" бралось бы из ячейки А1 листа 1.
2) Filename = Application.GetSaveAsFilename("отчёт.xls".... тут мы указываем заданное имя файла, а как сделать чтобы имя было свободно указываемое?
3) На листе 1 расчеты и кнопка "сохранить результат", на листе 2 и листе 3 таблицы с результатами вычислений. При нажатии на кнопку происходит сохранение значений листа 2 и листа 3 в отдельный файл в папку, имя которой указано в ячейке А1
Надо в созданном файле заменить формулы значениями из ИСХОДНОГО листа
(после копирования листа, формулы в созданном файле могут пересчитаться неверно)
Для этого, перед строкой
добавляем строку
а после строки
вставляем сохранённые значения при помощи такой строки кода:
Здравствуйте.
Подскажите, пожалуйста, что нужно изменить в вашем макросе, чтобы сохранить не активные листы (к примеру лист2 и лист3), но чтобы все выражения в скопированных листах были сохранены как значения
Здравствуйте, Денис.
Проще будет в этом случае скопировать лист целиком, а потом очистить значения ячеек ниже 3-й строки, например, при помощи следующего кода:
activesheet.copy ' создаём копию листа [4:1000].clearContents ' стираем только значения, начиная с 4-й строки листа-копии
Здравствуйте.
Мне нужно скопировать с ЛИСТа, только ШАПКУ, т.е. из Листа первые ТРИ строки и оставить ФОРМАТИРОВАНИЕ! (по столбцам и по строкам)
P.S.: Можно скопировать и ЧЕТЫРЕ строки, а с последней удалить контент.
Заранее, Спасибо.
Заменить ActiveSheet.Copy на Worksheets("ИмяЛиста").Copy или Worksheets(НомерЛиста).Copy
Здравствуйте! Подскажите, пожалуйста, что нужно изменить в вашем макросе, чтобы сохранить не активный лист?
Спасибо. Попробую. Хотя там используется ф-ция ".SaveCopyAs ", использоание которой ранее не привело к ожидаемому результату.
Может, вам подойдёт макрос создания копии файла?
http://excelvba.ru/code/CreateBackup
Уберите строку, запрашивающую имя файла, и вместо нее задайте нужное имя файла в коде.
И всё будет работать без лишних диалоговых окон.
Столкнулся с аналогичной задачей. Но основная сложность в сохранение копии файл. Как правильно отметили метод сохранить как не работает. Проблема в том, что всё автоматизировано (человек указывает папку с файлами исходниками, выходную папку, задает параметры), но для сохранения копии ему необходимо регулярно подтверждать сохранение. Можно ли доработать макрос, что бы при сохранении файла он не выдавал окна (остальные параметры можно расчитать)?
Спасибо
Спасибо вам огромное! Всё работает как нужно! Очень помогли! Сам пробовал писать не получалось!=)
Прочитайте, как сохранить файл Excel в другом формате
(как раз то, что вам нужно)
А можно сделать так что бы не указывать путь. так как он всегда разный, что не удобно. то есть так что бы открыл из любого места файл книги, нажал выполнить макрос, и он бы сохранился в другом формате (двоичная книга) в той же папке с заменой старого! объединение листов в один файл не нужно, просто сохранение в другом формате с такой же структурой книги. Ну очень нужно... Спасибо!))
Для сохранения книги в другом формате, достаточно внести изменения в эти 2 строки кода:
' меняем xlWorkbookNormal (XLS) на xlExcel12 (XLSB) ActiveWorkbook.SaveAs Filename, xlExcel12
Это если вам нужен макрос сохранения листа в файл.
Если же надо сохранить всю книгу - так запишите макрос при помощи макрорекордера.
Получится макрос из одной строки:
activeworkbook.saveas "<полный путь к создаваемому файлу>", xlExcel12
Здравствуйте, подскажите пожалуйста макрос который бы сохранял книгу в другом формате, для уменьшения её объема, а именно в формат Двоичная книга Exel. в книге несколько листов.
Замените начало функции на это:
Огромное спасибо за скрипт! Сам бы не смог такое сделать!
Только я не понял, а как сделать что бы он сохранял в определенную папку.
А то у меня сохраняет в
C:\Users\bogdanov\AppData\Roaming\Microsoft\Excel\XLSTART\April
"April" - я создал папку и описал в макросе
Все сумел сам :)
Этот макрос сохранит текущий лист в файл, взяв имя файла из ячейки:
Здравствуйте, подскажите как изменить этот макрос для того чтобы он сохранял в формате excel 2007, а имя файла брал из ячейки C2 и E2. Заранее спасибо!
А если все листы сохранять, то для каждого листа запрашивать имя файла?
PS: На форумах по Excel есть множество готовых макросов, сохраняющий все листы книги в отдельные файлы.
Не вижу смысла писать заново макрос, который написан уже тысячу раз.
Добрый день. А если надо все листы в книге? Спасибо
Отправить комментарий