Периодически приходится сталкиваться с задачей, когда необходимо в Excel сохранить листы рабочей книги как отдельные файлы.
Зачем? Например, есть файл с листами, которые содержат какие-либо данные по филиалам. Эти данные нужно разослать в филиалы, но весь файл мы отправить не можем, т.к. в нём содержится информация по другим структурным подразделениям.
Придётся разделить файл на несколько. Подобных примеров можно привести много.
Можно делать это вручную, но когда данных много, это потеря времени. К тому же, эта процедура может повторяться каждый месяц, неделю и пр.
Сохраняем листы в отдельные файлы с помощью VBA
Обратимся к возможностям Visual Basic for Applications.
Для себя я написал небольшой код на VBA, который автоматизировал эту задачу. Один раз написал и использую постоянно.
Как он работает?
Мой код определяет место на диске, где расположен файл Excel, в котором он запущен и создаёт внутри директорию с именем «newdir» (название можно изменить на своё). Далее он копирует каждый лист, сохраняет его как отдельную рабочую книгу в папку «newdir» и закрывает сохранённый файл. Именем файла будет имя вкладки.
Файлы можно сохранить и в текущую директорию, но я создал внутри папку для того, чтобы избежать возможных повторений имён файлов. К тому же все документы оказываются в одном месте, что удобно.
Итак, код.
Sub save_as_files()
Dim sPath As String
Dim sNewDir As String
sPath = ThisWorkbook.Path
sNewDir = "\newdir"
MkDir sPath & sNewDir
sPath = sPath & sNewDir
For Each wsheet In ActiveWorkbook.Sheets
wsheet.Copy
ActiveWorkbook.SaveAs sPath & "\" & wsheet.Name & ".xlsx"
ActiveWorkbook.Close
Next wsheet
End Sub
Вот такой несложный макрос позволяет сохранить лист Excel в отдельный файл.