MyTetra Share
Делитесь знаниями!
Макрос сохранения листа Excel в файл
Время создания: 16.03.2019 23:43
Текстовые метки: Excel, VBA, имя, лист
Раздел: Разные закладки - VBA - Excel
Запись: xintrea/mytetra_db_adgaver_new/master/base/1514664239mecqj3xd2q/text.html на raw.githubusercontent.com

Макрос сохранения листа 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 что-то там перемудрил)

  • 122005 просмотров
Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования