Сохранение файла Excel с названием из ячейки с помощью VBA
Здравствуйте, теперь мы рассмотрим ситуацию, когда необходимо сохранить файл в Excel с конкретным именем, которое должно быть образовано значением одной ячейки или даже больше. В этом посте я приведу простой пример того, как выполнить эту задачу.
Исходные данные
Во-первых, давайте взглянем на необработанные данные, которые я буду использовать в примерах. Пусть это будет некая абстракция марок автомобилей с указанием их VIN номеров.
Примечание! Я использую Excel 2013.
В зависимости от конкретных требований и условий, задача может быть реализована по-разному, хотя принцип будет тот же, в этой статье мы рассмотрим разные варианты реализации.
Начнем с простейшей ситуации, когда заранее известна ячейка, на основе которой будет формироваться имя файла, а адрес этой ячейки не изменится.
Сохранение файла Excel с названием из ячейки — с привязкой к этой ячейкеЗаметка! Этапы разработки программы: Как создаются и проектируются программы?
Итак, у нас есть данные, теперь нам нужно написать процедуру (макрос) VBA, которая принимает значение из определенной ячейки, в данном случае это будет ячейка B14, которая будет присвоить это значение имени файла.
Ниже приведен код процедуры, я подробно его прокомментировал. Единственное, что могу сказать, так это то, что во всех примерах, кроме новых файлов без макросов (расширение .xlsx), например, по сути, будет файл с поддержкой макросов, а все производные — без.
Если вам нужно сохранить макрос в каждом файле, например файл с поддержкой макросов (расширение .xlsm), то вам просто нужно указать другой тип файла при сохранении, т.е xlOpenXMLWorkbookMacroEnabled, это я указываю в процедурах в комментариях.
Откройте редактор Visual Basic в Excel и вставьте следующий код процедуры в исходный код этой книги (ThisBook, откройте двойным щелчком) или в модуль, который необходимо создать в первую очередь.
Примечание! Чтобы открыть редактор Visual Basic в Excel, вам нужно перейти на вкладку «Разработчик» и нажать кнопку «Visual Basic». Файл кода процедуры Excel необходимо сохранить как книгу Excel с поддержкой макросов».
Кодекс процедуры
Sub SaveFile () ‘Объявление переменной Dim CellValue As String Dim Path As String Dim FinalFileName As String’ Временно отключить отображение вспомогательных сообщений Application.DisplayAlerts = False ‘Установить каталог для сохранения файла (в данном случае текущий каталог) Path = ThisWorkbook.Path & «\» ‘Получить значение ячейки CellValue = Range («B14»)’ Сформировать окончательный путь и имя файла FinalFileName = Path & CellValue ‘Сохранить ActiveWorkbook.SaveAs FileName: = FinalFileName, _ FileFormat: = xlOpenXMLWorkbook’ FileFormat: = xlOpenXMLEneworkbookd ‘с макросом’ Активировать отображение сообщений Application.DisplayAlerts = True ‘Сообщение с результатом процедуры MsgBox «Файл успешно сохранен с именем -» & CellValue, vbInformation, «Result» End Sub
После сохранения файла запустите макрос («Макрос -> Выполнить -> Сохранить файл»).
Следовательно, в моем случае процедура прошла успешно, файл был сохранен с именем «Brand Auto 1», это значение взято из ячейки B14, которая будет выделена сообщением в конце процедуры. Файл сохраняется в каталоге, в котором находится исходный файл (во всех следующих примерах он записывается одинаково, т.е сохраняется рядом с источником, но вы можете его редактировать).
Добавление кнопки в Excel для запуска макросаЗаметка! Статический анализ кода в теории и на практике.
Не очень удобно каждый раз открывать окно с макросами и выбирать нужный макрос, поэтому вы легко можете добавить кнопку где-нибудь рядом с данными и просто щелкнуть по ней. Делается это следующим образом: «Вкладка разработчика -> Вставка -> Кнопка (элемент управления)».
Затем выберите место для вставки кнопки и щелкните там. Далее появится окно назначения действий, т.е вам нужно выбрать, какой макрос запускать при нажатии этой кнопки, выбрать наш макрос, т.е. SaveFile и нажмите «ОК».
В результате появится кнопка с названием «Кнопка», лучше изменить это имя, например, на «Сохранить файл». Для этого щелкните кнопку правой кнопкой мыши и выберите в настройках «Изменить текст». У вас должно получиться что-то вроде этого.
Сохранение файла Excel с названием из ячейки — без привязки к ячейкеЗаметка! ТОП-7 популярных языков программирования.
Теперь представим, что мы не можем заранее определить, какая ячейка будет формировать имя файла (может быть, B14, а может, и нет), поэтому мы можем немного настроить алгоритм так, чтобы он принимал значение из активной ячейки, но в этом случае , конечно, вы должны сначала выбрать его (т.е остаться на нем).
Замените код процедуры следующим, слегка измененным кодом.
Sub SaveFile () ‘Объявление переменной Dim CellValue As String Dim Path As String Dim FinalFileName As String’ Временно отключить отображение вспомогательных сообщений Application.DisplayAlerts = False ‘Установить каталог для сохранения файла (в данном случае текущий каталог) Path = ThisWorkbook.Path & «\» ‘Проверить значение ячейки Если ActiveCell.Value = «» Тогда MsgBox «Значение ячейки отсутствует», vbCritical, «Ошибка!» Выйти из подпрограммы End If’ Мы получаем значение активной ячейки CellValue = ActiveCell. Значение ‘Окончательный путь формы и имя файла FinalFileName = Path & CellValue’ Сохранить файл ActiveWorkbook.SaveAs FileName: = FinalFileName, _ FileFormat: = xlOpenXMLWorkbook ‘FileFormat: = xlOacXML’ Чтобы сохранить файл с макросом ‘Активировать отображение сообщений Application.DisplayAlerts = True MsgBox «Файл был успешно сохранен с именем -» & CellValue, vbInformation, «Result» End Sub
Проверяем работу, позиционируемся на нужной ячейке и запускаем макрос (в процедуре я добавил галочку, если выбрана пустая ячейка, произойдет ошибка).
Как видите, все обошлось.
Сохранение файла Excel с названием, которое сформировано из значений двух ячеек
Теперь представим, что нам нужно сгенерировать файл с именем из двух значений ячеек. Например, в нашем случае это может быть «Марка автомобиля — VIN-номер», в качестве разделителя я указал символ — (тире), но он может быть любым символом или вообще отсутствовать.
В этом примере я покажу, как реализовать это с привязкой к конкретным ячейкам, в нашем случае B14 и D14.
Код процедуры в этом случае будет выглядеть так.
Sub SaveFile () ‘Объявление переменной Dim CellValue As String Dim Path As String Dim FinalFileName As String’ Временно отключить отображение вспомогательных сообщений Application.DisplayAlerts = False ‘Установить каталог для сохранения файла (в данном случае текущий каталог) Path = ThisWorkbook.Path & «\» ‘Проверка значения ячеек B14 и D14, если диапазон («B14»). Значение = «» Или диапазон («D14»). Value = «» Then MsgBox «В ячейке нет значения», vbCritical, «Error!» Exit Sub End If ‘Добавить значения из двух ячеек B14 и D14 CellValue = Range («B14»). Значение & «-» и диапазон («D14»). Значение ‘Сформировать окончательный путь и имя файла FinalFileName = Path & CellValue’ Сохранить файл ActiveWorkbook.SaveAs FileName: = FinalFileName, _ FileFormat: = xlOpenXMLWorkbook ‘FileFormat: = xlOpenXMLWorkbookMacroEnabled’ Чтобы сохранить файл с макросом ‘Включить вывод сообщений Приложение. DisplayAlerts = True MsgBox «Результат был успешно сохранен с именем» & CellValue «End Sub
Запустим макрос.
Все хорошо, файл создан.
Если вам нужно внезапно реализовать его без привязки к конкретным ячейкам, например, значения хранятся в определенных столбцах, но вы заранее не знаете конкретную строку. Например, у меня есть несколько строк со значениями и какие конкретные значения взять за основу имени файла, я хочу указать непосредственно перед сохранением, но при этом не менять код процедуры.Заметка! Как измерить сложность программного кода при программировании?
Для этого мы снова внесем изменения в нашу процедуру, которая будет работать из активной ячейки (смещение от активной ячейки), только при условии, что выбран столбец с используемыми значениями.
Кодекс процедуры
Sub SaveFile () ‘Объявление переменной Dim CellValue As String Dim Path As String Dim FinalFileName As String’ Временно отключить отображение вспомогательных сообщений Application.DisplayAlerts = False ‘Установить каталог для сохранения файла (в данном случае текущий каталог) Path = ThisWorkbook.Path & «\» ‘Проверка номера столбца, если ActiveCell.Column 2 Then MsgBox «Указан недопустимый столбец», vbCritical, «Ошибка!» Выход из подпрограммы End If’ Проверить значение ячейки If ActiveCell.Value = «» Then MsgBox » Ячейка не содержит значения «, vbCritical,» Ошибка! » Exit Sub End If ‘Получить значение активной ячейки CellValue = ActiveCell.Value’ Переместить 2 столбца относительно активной ячейки ActiveCell.Offset (0, 2). Выберите ‘Добавить значения из двух ячеек CellValue = CellValue & «- «& ActiveCell .Value ‘Формируем окончательный путь и имя файла FinalFileName = Path & CellValue’ Сохраняем файл ActiveWorkbook.SaveAs FileName: = FinalFileName, _ FileFormat: = xlOpenXMLWorkbook ‘FileFormat: = xlOpenXMLWorkbookMacroEnabled’ Чтобы сохранить файл с макросом файл был успешно сохранен с именем — «& CellValue, vbInformation,» Result «End Sub
Перейдите в любую ячейку со значением в столбце B и запустите макрос.