Tooprogram.ru

Компьютерный справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Макрос для сохранения файла excel

Как на VBA сохранить файл Excel с названием, взятым из ячейки?

Привет, сейчас мы рассмотрим ситуацию, когда у Вас возникла необходимость в Excel сохранять файл с определенным названием, которое необходимо сформировать из значения ячейки или даже нескольких. В этой заметке я приведу простой пример реализации данной задачи.

Исходные данные

Сначала давайте разберем исходные данные, которые я буду использовать в примерах. Пусть это будет некая абстракция марок автомобилей с указанием их VIN номера.

Примечание! Я использую Excel 2013.

В зависимости от конкретных требований и условий, задачу можно реализовать по-разному, хотя принцип будет один и тот же, в этой статье мы рассмотрим несколько вариаций реализации.

Начнем мы с самой простой ситуации, когда заранее известна ячейка, на основе которой будет сформировано имя файла, и адрес этой ячейки изменяться не будет.

Сохранение файла Excel с названием из ячейки — с привязкой к этой ячейке

Итак, данные у нас есть, теперь необходимо написать процедуру на VBA (макрос), которая брала бы значение из конкретной ячейки, в данном случае это будет ячейка B14, и присваивала бы это значение имени файла.

Ниже представлен код процедуры, я его подробно прокомментировал. Единственное скажу, что я во всех примерах сохраняю новые файлы без макросов (расширение .xlsx), т.е. по факту будет один файл с поддержкой макросов, а все производные — без.

Если нужно сохранять макрос в каждом файле, т.е. файлы с поддержкой макросов (расширение .xlsm), то необходимо просто указать другой тип файла при сохранении, а именно xlOpenXMLWorkbookMacroEnabled, в процедурах в комментариях я это указываю.

Открываем в Excel редактор Visual Basic, и вставляем код следующей процедуры в исходный код этой книги (ЭтаКнига, открыть двойным кликом) или в модуль, который Вы предварительно должны создать.

Примечание! Для того чтобы открыть редактор Visual Basic в Excel, необходимо перейти на вкладку «Разработчик» и нажать на кнопку «Visual Basic». Файл Excel с кодом процедуры необходимо сохранить с типом «Книга Excel с поддержкой макросов».

Код процедуры

После сохранения файла запустите макрос («Макросы -> Выполнить -> SaveFile»).

В результате в моем случае процедура успешно выполнилась, файл сохранился с названием «Марка Авто 1», данное значение взято из ячейки B14, о чем будет свидетельствовать сообщение в конце процедуры. Файл сохранен в каталоге, где и исходный файл (во всех примерах ниже прописано то же самое, т.е. сохранение рядом с исходником, но это Вы можете изменить).

Добавление кнопки в Excel для запуска макроса

Каждый раз открывать окно с макросами и выбирать нужный макрос не очень удобно, поэтому можно легко добавить кнопку где-нибудь рядом с данными и просто нажимать ее. Это делается следующим образом «Вкладка Разработчик -> Вставить -> Кнопка (элемент управления формы)».

Затем выберите место, где вставить кнопку, и нажмите туда. После этого появится окно назначения действия, т.е. нужно выбрать, какой макрос запускать при нажатии этой кнопки, выбираем наш макрос, т.е. SaveFile, и нажимаем «ОК».

В итоге появится кнопка с названием «Кнопка», это название лучше изменить, например, на «Сохранить файл». Для этого нажмите правой кнопкой мыши на кнопку и выберите настройки «Изменить текст». В итоге у Вас должно получиться что-то вроде этого.

Сохранение файла Excel с названием из ячейки — без привязки к ячейке

Теперь давайте представим, что заранее мы не можем определить, какая именно ячейка будет формировать название файла (может B14, а может и нет), поэтому мы можем немного скорректировать алгоритм таким образом, чтобы он брал значение из ячейки, которая является активной, но в этом случае Вы, конечно же, предварительно, должны выбрать ее (т.е. встать на нее).

Замените код процедуры следующим кодом, который совсем немного, но изменен.

Проверяем работу, становимся на нужную ячейку, и запускаем макрос (в процедуре я добавил проверку, если выбрана пустая ячейка, возникнет ошибка).

Как видим, все отработало.

Сохранение файла Excel с названием, которое сформировано из значений двух ячеек

Теперь представим, что нам нужно сформировать файл с названием из значений двух ячеек. Например, в нашем случае это может быть «Марка Авто – VIN Номер», в качестве разделителя я указал символ – (дефис), но им может выступать любой символ или вовсе отсутствовать.

Читать еще:  Функция ранг в excel

В этом примере я покажу, как можно это реализовать с привязкой к конкретным ячейкам, в нашем случае B14 и D14.

Код процедуры в данном случае будет выглядеть следующим образом.

Все ОК, файл создан.

Если вдруг нужно реализовать без привязки к конкретным ячейкам, например, значения хранятся в определённых столбцах, но конкретная строка неизвестна Вам заранее. Например, у меня несколько строк со значениями, и какие конкретно значения взять за основу названия файла, я хочу указывать самостоятельно, непосредственно перед сохранением, но при этом не редактировать код процедуры.

Для этого мы снова внесем изменения в нашу процедуру, которая будет работать от активной ячейки (смещение от активной ячейки), только с условием того, что выбран столбец с теми значениями, которые необходимо использовать.

Код процедуры

Становитесь на любую ячейку со значением в столбце B, и запускайте макрос.

У меня на этом все, надеюсь, материал был Вам полезен, пока!

Макрос сохранения листа Excel в файл

Данный макрос позволяет упростить процедуру сохранения активного листа в книге Excel в отдельный файл.

Для использования этого макроса на любом листе в книге Excel создайте кнопку, и назначьте ей макрос СохранитьЛистВФайл.

При запуске макроса (нажатии кнопки) будет выведено диалоговое окно выбора имени для сохраняемого файла, после чего текущий лист будет сохранён под заданным именем в выбранной папке.

Сохранение производится в формате XLS (формат Excel 2003)
Если пользователь отказался от ввода имени файла (нажал клавишу ESC или кнопку «Отмена» в диалоговом окне),
то сохранения листа в файл не происходит.

PS: Кто-то может сказать, что для сохранения листа в файл в объектной модели Excel есть метод SaveAs, применимый к объекту Worksheet.

Но, как ни странно, выполнение кода ActiveSheet.SaveAs » « приводит к сохранению книги целиком, что равносильно использованию кода ActiveWorkbook.SaveAs » «

Почему этот метод сохранения работает так нелогично — лично мне не понятно (видимо, Microsoft что-то там перемудрил)

  • 150732 просмотра

Комментарии

Спасибо. Разобрался. Нашёл ошибки в библиотеках.)

Спасибо. Всё запустил, но не работает. Пишет не найден проект или библиотека. Простите, не уточнил, поменял ещё саму систему (был XP стал Win7 x64).
Вот мой код:
Private Sub CommandButton2_Click()
On Error Resume Next
Const REPORTS_FOLDER = «C:Users. . . »
MkDir ThisWorkbook.Path & «» & REPORTS_FOLDER
ChDrive Left(ThisWorkbook.Path, 1): ChDir ThisWorkbook.Path & «» & REPORTS_FOLDER
FileName = [b8] & «_» & [b6] & «_» & [b4] & «_» & Format([b2], «DDMMMMYY») & «_» & [c2] & «.xlsx»
Err.Clear: Worksheets(Array(. «, «. «)).Copy: DoEvents
If Err Then Exit Sub
If ActiveWorkbook.Worksheets.Count = 2 And ActiveWorkbook.Path = «» Then
ActiveWorkbook.SaveAs FileName, xlWorkbookNormal
ActiveWorkbook.Close False
End If
End Sub

Убедитесь, что макросы вообще включены в настройках Excel.
Перед запуском файла с макросами, необходимо выполнить следующее:

> найти файл с макросами в папке
> щелкнуть правой кнопкой мыши на файле — Свойства — Разблокировать — ОК
> и только после этого запускать

Перешёл с 2007 на Office 2016, перестали работать макросы. И этот. (((

Добрый день, подскажите, пожалуйста, что надо изменить в макросе, чтобы:
1. Он копировал не весь лист целеком, а только диапазон ВИДИМЫХ ячеек (A1:L50), т.к. этот диапазон только часть отфильтрованного списка.
2. Он копировал только значения, без формул ячеек.

Здравствуйте, Алексей
Да, можно такое сделать, — могу написать макрос под заказ.

Здравствуйте, Игорь.
Подскажите, пожалуйста, возможно ли такое, чтобы Лист можно было сохранять не единожды (по имени в одной ячейке) а сославшись на какой-либо диапазон ячеек. Есть потребность сделать в конкретной папке количество файлов соответствующее количеству дней в месяце(отчет на каждый день). Если в диапазоне ячеек указать даты месяца и по нажатию макрос сохранял бы, файлы с именем Даты.

Можете написать макрос под заказ? Мне надо до понедельника

Напишите ваши контакты, есть несколько задач.

Дмитрий, можем сделать вам макрос под заказ.
Оформляйте заказ, прикрепляйте файл (в который надо встроить макрос), и подробно описывайте, что куда в каком виде и под каким именем сохранять.

Дело в том, что в книге порядка 20-30 листов и каждый лист необходимо сохранить в отдельные папки, соответствующие имени листа.

Дмитрий, а куда уж проще-то. вы нажимаете одну кнопку «Печать», и получаете готовый файл JPG
Зачем ещё-то упрощать.
Можно, конечно, и макрос под заказ написать
Если в формат BMP (или EMF) картинку сохранять — то макрос несложный, если в формат JPG — то макрос сложнее будет (и дороже)
Но я бы на вашем месте не стал изобретать велосипед, а оставил бы все как есть.

Читать еще:  Конвертер музыки из видео ютуб

Сохраняю листы в JPEG формате, при помощи виртуального принтера «universal document converter» возможно ли упростить процедуру сохранения активного листа?

Здравствуйте, Игорь. Будьте любезны, взгляните на код. Основная часть была взята с другого сайта, часть с Вашего. Суть такая: на первом листе исходные данные и кнопка, на третьем — расчеты с формулами. Необходимо чтобы при нажатии кнопки создавалась папка «Двери» в текущей папке, где лежит этот файл (а если она есть, то сохранялось в нее), а имя файла бралось с листа 1 из ячеек a17 & b17. Сохраняться должен третий лист (он скрыт), формулы на нем заменить на значения. После сохранения новая книга закрывается и выводится сообщение об удачном сохранении файла с именем из ячеек a17 & b17. Сам я методом тыка пытался воплотить это, но лист не хочет сохраняться с указанным именем (используется имя по умолчанию «Книга 2. Книга 3. ). Также непонятно мне как сделать чтобы выскакивало сообщение о результате сохранения. Подскажите пожалуйста.

On Error Resume Next
Const REPORTS_FOLDER = «Двери»
‘ название подпапки, в которую по-умолчанию будет предложено сохранить файл

MkDir ThisWorkbook.Path & «» & REPORTS_FOLDER
‘ создаём папку для файла, если её ещё нет

ChDrive Left(ThisWorkbook.Path, 1): ChDir ThisWorkbook.Path & «» & REPORTS_FOLDER
‘ выбираем стартовую папку

Filename = Range(«a17») & («b17») & «.xls»
‘ вывод диалогового окна для запроса имени сохраняемого файла

If VarType(Filename) = vbBoolean Then Exit Sub
‘ если пользователь отказался от выбора имени файла — отменяем сохранение листа в файл

Dim Ar(), ArAll&(), Sh As Excel.Worksheet, n

Select Case Sheets(1).[Условие]
Case 1
Ar = Array(3)
Case Else
End Select

ReDim Preserve ArAll(0 To ThisWorkbook.Worksheets.Count — 1)
For Each Sh In ThisWorkbook.Worksheets
ArAll(n) = Sh.Index
n = n + 1
Next
ThisWorkbook.Worksheets(ArAll).Copy
Application.Volatile
Application.Calculate
Application.ScreenUpdating = False
For Each n In Ar
With ActiveWorkbook.Worksheets(n).UsedRange.Cells
.Value = .Value
End With
Next
Erase ArAll: n = 0
ReDim Preserve ArAll(0 To ThisWorkbook.Worksheets.Count — 1 — (UBound(Ar) + 1))
For Each Sh In ActiveWorkbook.Worksheets
If IsError(Application.Match(Sh.Index, Ar, 0)) Then
ArAll(n) = Sh.Index
n = n + 1
Else: If Sh.Visible = False Then Sh.Visible = True
End If
Next
ActiveWorkbook.Sheets(Ar(0)).Activate
Application.DisplayAlerts = False
ActiveWorkbook.Worksheets(ArAll).Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Dialogs(xlDialogSaveAs).Show

ActiveWorkbook.Close False
End Sub

Dim WB As Workbook
Dim ind As Integer
ind = ActiveSheet.Index
Application.DisplayAlerts = False
Set WB = Workbooks.Add
Dim li As Long
Application.DisplayAlerts = False
ind = 3
For n = ind To 2 Step -1
ThisWorkbook.Sheets(n).Copy Before:=WB.Sheets(1)
Next

pdfFilename = Application.DefaultFilePath & Application.PathSeparator & «имя файла» & Range(«D9»).Value & «.pdf»
WB.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=pdfFilename, OpenAfterPublish:=False

При этом файл создается с названием «имя файла.pdf» начисто игнорируя содержимое ячейки указанной.

Вот макрос, который сохраняет без ограничения 255-ти символов в ячейке:

Сохранение нескольких листов в Excel

Сохранение нескольких листов в Excel

Добрый день, уважаемые читатели и подписчики блога. Сегодня мы поговорим о сохранении листов большой книги Excel. Материал о расчётах между листами и книгами в Excel.

Как обычно, способов несколько.

Способ №1 (стандартный)

Щёлкаем правой кнопкой мышки на имя листа.

Выбираем команду «Переместить или скопировать».

В поле «Переместить выбранные листы в книгу:» выбираем «Новая книга».

После нажатия «ОК» произойдёт создание новой книги и выгрузка туда выделенного листа. Останется только сохранить документ.

Если нужно сохранить два и более листов их нужно выделить. Зажав клавишу Ctrl щёлкнуть на имя листа, затем повторить все вышеописанные действия.

Способ № 2 (макрос)

Представим ситуацию когда нужно одну большую книгу разделить на отдельные файлы. Сохранить требуется только выделенные листы.

Добавим новый модуль в нашу книгу:

  • На вкладке «Разработчик» нажимаем Visual Basic;
  • далее Insert — > Module;
  • записываем макрос.

Sub SohrList()
Dim CurrentWin As Window
Dim VremWin As Window
Set CurrentWin = ActiveWindow
Set VremWin = ActiveWorkbook.NewWindow
CurrentWin.SelectedSheets.Copy
VremWin.Close
End Sub

В итоге выделенные листы перейдут в новую книгу. Останется только её сохранить.

Если же необходимо разделить одну книгу на отдельные файлы и назвать их по именам листов, воспользуемся вот этим макросом.

Sub razbkn()
Dim q As Worksheet
Dim rabkn As Workbook
Set rabkn = ActiveWorkbook
For Each q In rabkniga.Worksheets
q.Copy
ActiveWorkbook.SaveAs rabkn.Path & «» & q.Name & «.xlsx»
End Sub

Немного пояснений. Этот макрос лучше использовать в том случае, когда книга уже находится в отдельной папке. Все извлечённые из неё литы будут сохранены в той же папке, что и документ родитель. Не стоит использовать макрос для вновь созданной, но ещё не сохранённой книги — программа будет просто вылетать.

Читать еще:  Закрыл не сохранив документ excel

Если знаете ещё способы — делитесь ими в комментариях, буду рад научиться чему-нибудь новому! Всем удачи!

Как сохранить программный код макроса? Что такое модули?

Одним из способов установки (сохранения) макросов на своем компьютере является копирование программного кода и его вставка с последующим сохранением в модуль проекта редактора Visual Basic.

Напомню, что язык Visual Basic for Applications (VBA) – полнофункциональный язык программирования, встроенный в различные приложения компании Microsoft, а также других разработчиков программного обеспечения. Код VBA создается в редакторе Visual Basic Editor. Макросы VBA сохраняются в файлах документов в Word и в файлах рабочих книг в Excel. Макросы сохраняются в специальной части файла, которая называется модулем. Модуль – это элемент проекта, в котором хранится программный код. Каждый документ Word, каждая рабочая книга Excel может содержать один или несколько модулей, а может и не содержать ни одного модуля. Модули, сохраняемые в документе или книге имеют общее название — Project (проект).

Модули делятся на два типа: стандартные модули и модули класса. Основное содержание модулей — это макросы и процедуры написанные на языке VBA. Процедура — совокупность команд или инструкций в модуле, выполняемых как одна программа. В VBA существуют процедуры-подпрограммы Subprogram и процедуры- функции Function. Процедура от макроса отличается наличием в программном коде переменных.

Стандартные модули содержат процедуры, которые не связаны с конкретным объектом. Стандартный модуль — это модуль, в который помещают процедуры Sub и Function, которые должны быть доступны для всех процедур в данном приложении.

Модуль класса отличается от стандартного модуля тем, что, кроме процедур содержит еще и описание объекта и используется для создания классов (объектов).

Перед тем как копировать и вставлять программный код макроса в модуль проекта, откроем редактор Visual Basic. Чтобы запустить этот редактор, выберите команду Сервис/Макрос/Редактор Visual Basic, если Вы используете MS Office 2003, либо сочетанием клавиш Alt+F11 (универсальный способ вызова редактора для любых версий). Редактор открывается в новом окне, содержащем несколько панелей, расположением которых можно управлять. На рисунке ниже обозначены три стандартные панели.

1. Основное место занимает самая большая из них — область разработки. Эта панель используется для написания кода программ. При наличии готовых макросов их код отображается в области разработки.

2. На панели проектов представлен список всех составляющих объектов проекта, по умолчанию это три листа (электронные таблицы) и рабочая книга.

3. На панели свойств отображаются все свойства, ассоциированные с выбранным объектом. Изменения, которые вносятся на панель свойств, влияют на свойства объекта. Кроме того, изменения в области разработки отражаются в значениях величин, которыми определяются свойства объекта.

В проект можно добавлять дополнительные объекты. Код программы, который не связан с определенным объектом (например с листом или формой), обычно хранится в модуле.

Если в списке проекта отсутствует модуль Module1, то перед записью макроса его нужно добавить. Кроме того, можно добавлять объекты формы, создавая в программе графические интерфейсы пользователя.

Для вставки модуля в проект, выберите в меню редактора VBA команду Insert/Modul, либо воспользуйтесь контекстным меню, щелкнув правой кнопкой мыши в области панели проектов и выбрав пункт меню, как показано на картинке ниже. В список проекта будет добавлен модуль с именем Module1.

Можно дважды щелкнуть на этом имени в списке проекта и переименовать модуль. Переименование как раз будет происходить в третьей из основных панелей редактора, отображающей свойства элементов проекта.

Таким образом сохранение макросов на своем компьютере можно описать следующей последовательностью шагов:

  1. Находите и копируете в буфер обмена код макроса;
  2. Открываете на своем компьютере редактор Visual Basic (Alt+F11), выбираете существующий (или при необходимости добавляете новый) модуль;
  3. Вставляете в свой модуль данные из буфера обмена;
  4. Сохраняете внесенные изменения.
  5. Вызываете список своих макросов сочетанием клавиш Alt+F8, выбираете и запускаете нужный Вам макрос.

Если вдруг после копирования кода макрос не запускается, рекомендую внимательно прочитать статью «Что делать если макрос не работает?». Модули проектов можно импортировать и экспортировать.

Ссылка на основную публикацию
Adblock
detector