Макрос сохранения листа Excel в файл
- Макросы VBA Excel
- Обработка файлов
- Работа с диапазонами ячеек и листами
- Создание файлов
- Листы Excel
- Книги Excel
|
Данный макрос позволяет упростить процедуру сохранения активного листа в книге 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 что-то там перемудрил)
|