Данный макрос позволяет упростить процедуру сохранения активного листа в книге Excel в отдельный файл.Для использования этого макроса на любом листе в книге Excel создайте кнопку, и назначьте ей макрос СохранитьЛистВФайл. При запуске макроса (нажатии кнопки) будет выведено диалоговое окно выбора имени для сохраняемого файла, после чего текущий лист будет сохранён под заданным именем в выбранной папке.Сохранение производится в формате XLS (формат Excel 2003) 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 что-то там перемудрил)
|
|||

Комментарии
Заменить ActiveSheet.Copy на Worksheets("ИмяЛиста").Copy или Worksheets(НомерЛиста).Copy
Здравствуйте! Подскажите, пожалуйста, что нужно изменить в вашем макросе, чтобы сохранить не активный лист?
Спасибо. Попробую. Хотя там используется ф-ция ".SaveCopyAs ", использоание которой ранее не привело к ожидаемому результату.
Может, вам подойдёт макрос создания копии файла?
http://excelvba.ru/code/CreateBackup
Уберите строку, запрашивающую имя файла, и вместо нее задайте нужное имя файла в коде.
И всё будет работать без лишних диалоговых окон.
Столкнулся с аналогичной задачей. Но основная сложность в сохранение копии файл. Как правильно отметили метод сохранить как не работает. Проблема в том, что всё автоматизировано (человек указывает папку с файлами исходниками, выходную папку, задает параметры), но для сохранения копии ему необходимо регулярно подтверждать сохранение. Можно ли доработать макрос, что бы при сохранении файла он не выдавал окна (остальные параметры можно расчитать)?
Спасибо
Спасибо вам огромное! Всё работает как нужно! Очень помогли! Сам пробовал писать не получалось!=)
Прочитайте, как сохранить файл Excel в другом формате
(как раз то, что вам нужно)
А можно сделать так что бы не указывать путь. так как он всегда разный, что не удобно. то есть так что бы открыл из любого места файл книги, нажал выполнить макрос, и он бы сохранился в другом формате (двоичная книга) в той же папке с заменой старого! объединение листов в один файл не нужно, просто сохранение в другом формате с такой же структурой книги. Ну очень нужно... Спасибо!))
Для сохранения книги в другом формате, достаточно внести изменения в эти 2 строки кода:
Filename = Application.GetSaveAsFilename("отчёт.xlsb", "Отчёты Excel (*.xlsb),", , _
"Введите имя файла для сохраняемого отчёта", "Сохранить")
ActiveWorkbook.SaveAs Filename, xlExcel12
Это если вам нужен макрос сохранения листа в файл.
Если же надо сохранить всю книгу - так запишите макрос при помощи макрорекордера.
Получится макрос из одной строки:
Здравствуйте, подскажите пожалуйста макрос который бы сохранял книгу в другом формате, для уменьшения её объема, а именно в формат Двоичная книга Exel. в книге несколько листов.
Замените начало функции на это:
On Error Resume Next
' путь к папке, в которую по-умолчанию будет предложено сохранить файл
Folder$ = "D:\Distr\Моя папка\": MkDir Folder$
ChDrive Left(Folder$, 1): ChDir Folder$ ' выбираем стартовую папку
' вывод диалогового окна для запроса имени сохраняемого файла
...
Огромное спасибо за скрипт! Сам бы не смог такое сделать!
Только я не понял, а как сделать что бы он сохранял в определенную папку.
А то у меня сохраняет в
C:\Users\bogdanov\AppData\Roaming\Microsoft\Excel\XLSTART\April
"April" - я создал папку и описал в макросе
Все сумел сам :)
Этот макрос сохранит текущий лист в файл, взяв имя файла из ячейки:
On Error Resume Next
' название подпапки, в которую будет сохранён файл
Const REPORTS_FOLDER = "Отчёты\"
MkDir ThisWorkbook.Path & "\" & REPORTS_FOLDER ' создаём папку для файла, если её ещё нет
' формируем имя файла из текста ячеек
Filename = [c2] & [e2] & ".xlsx"
' копируем активный лист (при этом создаётся новая книга)
Err.Clear: ActiveSheet.Copy: DoEvents
If Err Then Exit Sub ' произошла какая-то ошибка при попытке копирования листа
' убеждаемся, что активной книгой является копия листа
If ActiveWorkbook.Worksheets.Count = 1 And ActiveWorkbook.Path = "" Then
' сохраняем файл под заданным именем в формате XLSX (xlOpenXMLWorkbook - Excel 2007)
ActiveWorkbook.SaveAs Filename, xlOpenXMLWorkbook
' закрываем сохранённый файл
ActiveWorkbook.Close False
End If
End Sub
Здравствуйте, подскажите как изменить этот макрос для того чтобы он сохранял в формате excel 2007, а имя файла брал из ячейки C2 и E2. Заранее спасибо!
А если все листы сохранять, то для каждого листа запрашивать имя файла?
PS: На форумах по Excel есть множество готовых макросов, сохраняющий все листы книги в отдельные файлы.
Не вижу смысла писать заново макрос, который написан уже тысячу раз.
Добрый день. А если надо все листы в книге? Спасибо
Отправить комментарий