На чтение 8 мин. Просмотров 6.9k.
Итог: Изучите несколько трюков и советов, чтобы сохранить и закрыть все открытые книги Excel.
Уровень мастерства: Начинающий
Если вы используете Excel весь день каждый день, как я, то у вас, наверняка, открыто много рабочих книг одновременно. Я стараюсь дисциплинировать себя, но иногда это трудно. И в конце дня мы просто хотим закрыть все открытые рабочие тетради и пойти домой! Итак, этот пост содержит несколько советов по быстрому закрытию всех открытых файлов, чтобы помочь сократить трафик в час пик.
Содержание
- Совет № 1: Shift + кнопка закрытия окна
- Совет № 2: добавьте кнопку «Закрыть все» на панель быстрого доступа
- Совет № 3: Закройте все открытые книги с помощью макроса
- У вас есть свои советы по сохранению и закрытию файлов?
Совет № 1: Shift + кнопка закрытия окна
Самый
быстрый способ закрыть все открытые книги — это удерживать клавишу Shift,
нажимая кнопку «Закрыть окно». Кнопка «Закрыть окно» — это «х» в правом верхнем
углу окна приложения
Если все открытые книги были сохранены, все они будут
закрыты.
Если какая-либо из открытых книг НЕ была сохранена, вам
будет предложено сохранить файл. Появится всплывающее окно, и вам придется
нажимать Сохранить или Не сохранять для каждой несохраненной книги.
Окно также содержит кнопку Сохранить все. Вы можете нажать эту кнопку, чтобы сохранить все несохраненные книги за один шаг.
Нажатие на кнопку «Отмена» отменит всю операцию, а все еще открытые книги останутся открытыми.
Но что, если мы не хотим сохранить все или некоторые из открытых рабочих книг? Мы вернемся к этому в совет № 3.
Совет № 2: добавьте кнопку «Закрыть все» на панель быстрого доступа
Мы также можем добавить кнопку «Закрыть все» на панель
быстрого доступа (QAT), чтобы закрыть все открытые книги. Это делает то же
самое, что и сочетание клавиш Shift + Close Window.
Преимущество здесь в том, что мы можем использовать сочетание клавиш для нажатия кнопки. Доступ к кнопкам QAT можно получить с помощью сочетания клавиш, нажав клавишу Alt и номер, назначенный кнопке.
Чтобы добавить кнопку «Закрыть все» в QAT, откройте окно параметров Excel («Файл»> «Параметры») и следуйте инструкциям на изображении ниже.
После нажатия кнопки «Закрыть все» нам будет предложено то же окно, как описано в совете № 1.
Бонусный совет: мы также можем использовать сочетание клавиш Ctrl + W, чтобы закрыть одну книгу. Я упомянул этот совет в своем посте по 17 ярлыкам Excel на 2017 год.
Совет № 3: Закройте все открытые книги с помощью макроса
В этом разделе я поделюсь несколькими макросами, которые можно использовать для закрытия всех открытых рабочих книг. Макросы дают нам большую гибкость, когда мы хотим контролировать, какие книги сохраняются перед закрытием.
Макрос для закрытия всех книг без сохранения
Если мы не хотим сохранять какие-либо открытые файлы, мы
можем использовать следующий макрос.
Sub Close_All_Files_No_Save() ' Закройте все открытые книги и не сохраняйте Dim wb As Workbook ' Просмотрите каждую рабочую книгу For Each wb In Application.Workbooks ' Предотвратить рабочую книгу, которая содержит ' код от закрытия If wb.Name <> ThisWorkbook.Name Then ' Закройте книгу и не сохраняйте изменения wb.Close SaveChanges:=False End If Next wb End Sub
Как работает этот макрос?
Приведенный выше макрос просматривает все открытые книги на компьютере с помощью цикла For Next Loop. Он использует оператор If, чтобы проверить, является ли файл в цикле (wb.Name) НЕ (<>) файлом, который содержит код ThisWorkbook.Name.
Затем он использует метод Workbooks.Close (страница справки MSDN), чтобы закрыть книгу. Метод Close имеет необязательный параметр для SaveChanges. Мы можем установить значение True, чтобы сохранить изменения, и False, чтобы закрыть без сохранения.
Примечание. Этот макрос следует запускать только в том случае, если вы уверены, что не хотите сохранять изменения ни в одном из открытых файлов. Его нельзя отменить. Возможно, вы также захотите добавить окно сообщения Да / Нет, чтобы предупредить пользователя перед запуском этого макроса.
Макрос для сохранения всех, кроме новых несохраненных книг (блокнот)
В конце рабочего дня у меня обычно есть несколько книг, которые я хочу сохранить, и некоторые, которые я НЕ хочу сохранять. Я часто открываю новые рабочие книги, чтобы использовать файлы Excel для быстрых вычислений. Я называю их «блокноты». Я не хочу сохранять их, но хочу сохранить все другие открытые файлы.
Файлы — блокноты никогда не сохранялись, поэтому они еще не имеют расширения. Они называются: Book1, Book2, Book2 и т.д. Обратите внимание, что на снимке экрана отсутствует расширение файла (.xlsx, .xlsm).
Таким образом, мы можем добавить оператор If в наш макрос, чтобы увидеть, существует ли расширение файла. Если расширение файла существует, то мы сохраним файл. Если нет, то мы закроем без сохранения.
Sub Save_and_Close_All_Files_Except_ScratchPads() ' Закройте все открытые книги, кроме новых несохраненных файлов Dim wb As Workbook ' Просмотрите каждую рабочую книгу For Each wb In Application.Workbooks ' Предотвратить рабочую книгу, которая содержит ' код от закрытия If wb.Name <> ThisWorkbook.Name Then ' Проверьте, имеет ли имя файла расширение If InStr(Right(wb.Name, 5), ".xls") > 0 Then wb.Close SaveChanges:=True Else ' Не сохраняйте изменения, если это блокнот. wb.Close SaveChanges:=False End If End If Next wb End Sub
Как работает этот макрос?
Этот макрос похож на макрос для закрытия всех книг. Разница
в том, что мы используем оператор If, чтобы проверить, имеет ли файл
расширение.
Функция Right используется для возврата 5 символов в конце
имени файла. Если wb — это существующий файл, который уже был сохранен, то
Right (wb.Name, 5) вернет «.xlsx» или «.xlsm».
Функция Instr (страница справки MSDN) используется для поиска строки в строке. Возвращает начальный номер строки. Таким образом, если Instr находит «.xls» в пределах «.xlsx» или «.xlsm», он возвращает 1. В противном случае он возвращает 0.
Оператор If проверяет, является ли возвращаемое значение из
Instr больше 0, и сохраняет изменения при закрытии книги. В противном случае
изменения не сохраняются для книг, которые НЕ содержат расширения.
Макрос для сохранения и закрытия всех книг и автоматического именования файлов
Иногда нам можем быть нужно сохранить некоторые из этих новых файлов (блокноты), но у нас нет времени, чтобы просмотреть каждый файл и сохранить его с именем.
Следующий макрос сохранит и закроет ВСЕ файлы и автоматически назовет новые файлы, которые не были сохранены. Он помещает все новые файлы (блокнот) в указанную вами папку.
Затем вы можете вернуться в эту папку, когда у вас будет свободное время для перемещения и переименования файлов.
Sub Save_and_Close_All_Files() ' Закройте все открытые книги, кроме новых несохраненных файлов Dim wb As Workbook Dim sPath As String ' Путь, где будут сохранены новые несохраненные файлы. ' Измените это на папку на вашем компьютере. Конец с обратной косой чертой sPath = "C:UsersusernameDocumentsExcel CampusScratch Pads" ' Просмотрите каждую рабочую книгу For Each wb In Application.Workbooks ' Предотвратить рабочую книгу, которая содержит ' код от закрытия If wb.Name <> ThisWorkbook.Name Then ' Проверьте, имеет ли имя файла расширение If InStr(Right(wb.Name, 5), ".xls") > 0 Then wb.Close SaveChanges:=True Else ' Сохранить блокноты в папке wb.Close SaveChanges:=True, _ Filename:=sPath & wb.Name & Format(Now, " yyyy-mm-dd-hhmm") End If End If Next wb End Sub
Как работает этот макрос?
Этот макрос работает аналогично двум другим выше.
Единственное отличие состоит в том, что он сохраняет новые файлы (блокноты) в
папку на вашем компьютере.
Чтобы использовать этот макрос, вам нужно изменить
переменную sPath на папку на вашем компьютере. Обязательно заканчивайте строку
пути к файлу обратной косой чертой.
У метода Workbooks.Close есть еще один необязательный
параметр (Filename), который позволяет нам указать имя файла, в котором мы
хотим сохранить файл, если файл еще не был сохранен.
Если мы не используем параметр «Имя файла», Excel предложит
нам меню «Сохранить как» для каждого файла. Таким образом, указание имени файла
обходит это окно и может сэкономить нам много времени.
Значение параметра Filename объединяет строку для полного
пути к файлу. Он также изменяет текущую дату и время до конца имени файла,
используя функции «Формат» и «Сейчас». Функция Format в VBA аналогична функции
TEXT в Excel и позволяет нам указать числовой формат. Функция «Сейчас»
возвращает текущую дату и время на компьютере пользователя.
Я рекомендую добавить эти макросы в вашу личную книгу макросов, чтобы вы могли использовать их в любое время. Чтобы узнать больше, ознакомьтесь с моей статьей и видео о личной книге макросов.
У вас есть свои советы по сохранению и закрытию файлов?
Я надеюсь, что эти советы и макросы помогут вам закончить день немного быстрее. Есть ли у вас какие-либо другие советы по закрытию файлов? Пожалуйста, оставьте комментарий ниже с любыми предложениями или вопросами. Спасибо!
Сохранение листов книги как отдельных файлов
Про сборку листов из нескольких книг в одну текущую я уже писал здесь. Теперь разберем решение обратной задачи: есть одна книга Excel, которую нужно «разобрать», т.е. сохранить каждый лист как отдельный файл для дальнейшего использования.
Примеров подобного из реальной жизни можно привести массу. Например, файл-отчет с листами-филиалами нужно разделить на отдельные книги по листам, чтобы передать затем данные в каждый филиал и т.д.
Если делать эту процедуру вручную, то придется для каждого листа выполнить немаленькую цепочку действий (выбрать лист, правой кнопкой по ярлычку листа, выбрать Копировать, указать отдельный предварительно созданный пустой файл и т.д.) Гораздо проще использовать короткий макрос, автоматизирующий эти действия.
Способ 1. Простое разделение
Нажмите сочетание Alt+F11 или выберите в меню Сервис — Макрос — Редактор Visual Basic (Tools — Macro — Visual Basic Editor), вставьте новый модуль через меню Insert — Module и скопируйте туда текст этого макроса:
Sub SplitSheets1() Dim s As Worksheet For Each s In ActiveWorkbook.Worksheets 'проходим по всем листам в активной книге s.Copy 'копируем каждый лист в новый файл Next End Sub
Если теперь выйти из редактора Visual Basic и вернуться в Excel, а затем запустить наш макрос (Alt+F8), то все листы из текущей книги будут разбиты по отдельным новым созданным книгам.
Способ 2. Разделение с сохранением
При необходимости, можно созданные книги сразу же сохранять под именами листов. Для этого макрос придется немного изменить, добавив команду сохранения в цикл:
Sub SplitSheets2() Dim s As Worksheet Dim wb as Workbook Set wb = ActiveWorkbook For Each s In wb.Worksheets 'проходим во всем листам активной книги s.Copy 'сохраняем лист как новый файл ActiveWorkbook.SaveAs wb.Path & "" & s.Name & ".xlsx" 'сохраняем файл Next End Sub
Этот макрос сохраняет новые книги-листы в ту же папку, где лежал исходный файл. При необходимости сохранения в другое место, замените wb.Path на свой путь в кавычках, например «D:Отчеты2012» и т.п.
Если нужно сохранять файлы не в стандартном формате книги Excel (xlsx), а в других (xls, xlsm, xlsb, txt и т.д.), то кроме очевидного изменения расширения на нужное, потребуется добавить еще и уточнение формата файла — параметр FileFormat:
ActiveWorkbook.SaveAs wb.Path & "" & s.Name & ".xlsb", FileFormat:=50
Для основных типов файлов значения параметра FileFormat следующие:
- XLSX = 51
- XLSM = 52
- XLSB = 50
- XLS = 56
- TXT = 42
Полный список всех вариантов можно посмотреть в справке MSDN.
Способ 3. Сохранение в новые книги только выделенных листов
Если вы хотите раскидать по файлам не все листы в вашей книге, а только некоторые, то макрос придется немного изменить. Выделите нужные вам листы в книге, удерживая на клавиатуре клавишу Ctrl или Shift и запустите приведенный ниже макрос:
Sub SplitSheets3() Dim AW As Window Set AW = ActiveWindow For Each s In AW.SelectedSheets Set TempWindow = AW.NewWindow 'создаем отдельное временное окно s.Copy 'копируем туда лист из выделенного диапазона TempWindow.Close 'закрываем временное окно Next End Sub
Создавать новое окно и копировать через него, а не напрямую, приходится потому, что Excel не умеет копировать группу листов, если среди них есть листы с умными таблицами. Копирование через новое окно позволяет такую проблему обойти.
Способ 4. Сохранение только выделенных листов в новый файл
Во всех описанных выше способах каждый лист сохранялся в свой отдельный файл. Если же вы хотите сохранить в отдельный новый файл сразу группу выделенных предварительно листов, то нам потребуется слегка видоизменить наш макрос:
Sub SplitSheets4() Dim CurW As Window Dim TempW As Window Set CurW = ActiveWindow Set TempW = ActiveWorkbook.NewWindow CurW.SelectedSheets.Copy TempW.Close End Sub
Способ 5. Сохранение листов как отдельных PDF-файлов
Этот способ чем-то похож на второй, но листы сохраняются не как отдельные книги Excel, а в формате PDF, что часто требуется, если никто не должен менять документ и увидеть ваши формулы. Обратите внимание, что:
- для этого используется уже другой метод (ExportAsFixedFormat а не Copy)
- листы выводятся в PDF с параметрами печати, настроенными на вкладке Разметка страницы (Page Layout)
- книга должна быть сохранена на момент экспорта
Нужный нам код будет выглядеть следующим образом:
Sub SplitSheets5() Dim s As Worksheet For Each s In ActiveWorkbook.Worksheets s.ExportAsFixedFormat Filename:=ThisWorkbook.Path & "" & s.Name & ".pdf", Type:=xlTypePDF Next End Sub
Способ 6. Готовый макрос из надстройки PLEX
Если лень или нет времени внедрять все вышеописанное, то можно воспользоваться готовым макросом из моей надстройки PLEX:
Ссылки по теме
- Сборка листов из нескольких книг в одну
- Что такое макросы, куда вставлять код на Visual Basic, как их использовать.
- Создание файлов
- Листы 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 что-то там перемудрил)
- 178181 просмотр
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.
Сохранение макроса
Смотрите также именем копии REPEAT_: «Книга1.xls» sExp = регулярно скидывать в & IIf(Right(sFileName, Len(sExpansion))Alex_ST ИМХО, InputBox и через InputBox илиFilename:=»трам-пам-пам.xls», _ рабочий файл (имена-то Или открыть вЕсли вам нужно записать «РАЗРАБОТЧИК»-«Код»-«Visual Basic». ИлиОстановить запись. ее текст может макрос Excel предложитПримечание: FileName = Application.GetSaveAsFilename(InitialFileName:=sFullFilePath, Right(FileName, Len(FileName) - разные директории на <> sExpansion, sExpansion,
: К стати, не окно задания пути ещё как-то…FileFormat:=xlNormal, _ совпадают!!!). редакторе Personal и в нее новый нажмите комбинацию горячих.Чтобы при запуске Excel содержать неточности и
Сохранение макроса в текущей книге
два варианта:Мы стараемся как _ FileFilter:=»Excel Files InStrRev(FileName, «.») + общем ресурсе. «») подскажите «на вскидку» сохранения файла -В чём хитрость-то?Password:=»», _или туда вставить модуль? макрос просто откройте клавиш ALT+F11. ВПри закрытии Excel в автоматически открывались книги, грамматические ошибки. ДляСохранить в виде книги можно оперативнее обеспечивать
-
(*» & sExp 1) ‘ расширениеДостало постоянно выбиратьIf sFileName = как к имени
-
это «две большиеThe_PristWriteResPassword:=»», _- сказать Ёкселюz_korch
редактор, а потом окне «Project-VBAProject», в конечном итоге будет
-
выполните указанные ниже нас важно, чтобы с поддержкой макросов
-
вас актуальными справочными & «), *» файла вместе с куда и какой ThisWorkbook.FullName Then файла при сохранении разницы» …: А кто мешает
-
ReadOnlyRecommended:=True, _ «Сохранить как…» и: Может я не
Создание и сохранение макросов в личной книге
откройте модуль книги дереве проектов появиться предложено сохранить изменения действия. эта статья была (XLSM-файл), выбрав материалами на вашем & sExp & точкой (например, «.xls») файл сохранять…MsgBox «Нельзя сохранить добавить перед расширениемThe_Prist перед этим вывести
support.office.com
Запись макроса для открытия определенных книг при запуске Excel
CreateBackup:=False указать с каким знаю как в Personal.xlsb. Уже записанные доступная еще одна в личной книгеОткройте вкладку вам полезна. ПросимНет языке. Эта страница «, All Files FileName = Left(FileName,Переделал макрос Save_Copy_As файл под имененм суффикс — дату: Я Вам уже диалог?End Sub именем, куда и редакторе открыть Personal?Когда в нее макросы книга Personal.xlsb. Кликните
макросов. Нажмите кнопкуРазработчик вас уделить пару. переведена автоматически, поэтому (*.*),*.*», _ Title:=»Сохранение Len(FileName) — Len(sExp)) так, что путь открытого файла!», vbCritical и время сохранения? целый пример накатал
Dim sFileName Asне подходят, т.к. с какими паролями в VBA открываю удалять не нужно. на «плюсик» слева «Да», чтобы макрос
-
и нажмите кнопку секунд и сообщить,Сохранить в виде книги ее текст может копии файла») ‘задать & sSuff & последнего сохранения копии + vbYesNo, «Ошибка»
-
(ну, например, Имя_моего_рабочего_файла(01-06-2010 — чем он String, sExpansion As это как раз сохранить файл. А View->Project, то вижу Они не будут
-
на против этой запускался при каждомЗапись макроса
помогла ли она без поддержки макросов, содержать неточности и путь сохранения и
-
sExp ‘ например, запоминается в самомGoTo BEGIN_ 14-30).xls не устраивает? Выбор
-
String и есть описанный потом закрыть тот среди объектов только между собой конфликтовать
-
книги, чтобы раскрыть запуске Excel.. вам, с помощью выбрав
-
грамматические ошибки. Для имя копии файла «Книга1 [2012.02.06 15-24’39»].xls»
-
файле в коллекцииEnd IfThe_Prist через диалог, сохраняетBEGIN_: мною выше второй сетевой, видный для
-
Лист1,2,3,и ЭтаКнига… все. если соблюдать одно проект книги Personal.xlsb.
-
Каждый раз при запускеВ поле кнопок внизу страницы.Да нас важно, чтобы в окне выбора On Error Resume NamesThisWorkbook.Password = «1»:SetAttr: SetAttr ThisWorkbook.FullName, vbReadOnly куда укажешь иsFileName = ThisWorkbook.Name случай… всех, файл и
-
Если Insert->Module?, то простое правило – А после двойным Excel автоматически будутИмя макроса
-
Для удобства также. эта статья была If VarType(FileName) = Next sDirPath =Два дня поюзал ThisWorkbook.FullName, vbReadOnlyAlex_ST
с паролем, даsExpansion = Right(sFileName,tolikt открыть свой рабочий.
support.office.com
Личная книга макросов в Excel и как ее использовать
тоже предлагает сохранить в одном модуле щелчком отройте ее открываться книги, включенныевведите приводим ссылку наЧтобы сохранить макрос как вам полезна. Просим vbBoolean Then Exit .Names(sPath_in_Names).Value ‘ считать — понравилось!ThisWorkbook.SaveCopyAs sFileName: К сожалению, свойство еще и предупреждает, Len(sFileName) — InStrRev(sFileName,: .SaveCopyAs чем не Это тоже не только в «Книга1-ЭтаКнига(Code)» нельзя хранить макросы Module1. в макрос.Auto_Open
Как сохранить макрос в личную книгу макросов
оригинал (на английском книгу с поддержкой вас уделить пару
- Sub ‘ если
- из коллекции .NamesSub Save_Copy_As() ‘—————————————————————————————ThisWorkbook.Password = «»:SetAttr vbReadOnly при SaveCopyAs если такой файл «.») + 1) устраивает?
- слишком удобно, т.к.kaa
- с одинаковыми именами.В результате откроется окноБольшинство пользователей Excel знают,. языке) . макросов, секунд и сообщить, нажали «Отмена», то значение, ранее сохраненное ‘ Procedure : ThisWorkbook.FullName, vbNormal задать не удаётся… есть.sFileName = Application.GetSaveAsFilenameThe_Prist
- требует много «мышкодвижений».: в экселе Сервис-Параметрыz_korch кода модуля с как создать иВ спискеПредположим, что вы хотитещелкните помогла ли она FileName = False,
под именем sPath_in_Names
Save_Copy_As ‘ AuthorHugoА нельзя лиAlex_STIf sFileName =: ThisWorkbook.Password = «1»А недавно поставил вкладка «Общие» там: Добрый день! Спасибо зарегистрированным макросом. Удалите использовать макрос внутриСохранить в
записать макрос дляНет вам, с помощью если «Сохранить» - If Err Then : Alex_ST ‘: его задать для: The_Prist, вы с «False» Then ExitThisWorkbook.SaveCopyAs ‘полный путь, себе прогу «PDF-Exchange» есть поле «каталог
за замечательный сайт!Много его код и файла одной рабочейвыберите пункт открытия книг, которые. кнопок внизу страницы. полный путь к .Names.Add sPath_in_Names, .Path Topic_HEADER : КакAlex_ST, про дату в уже созданного файла-копии? такой скоростью создаёте Sub включая расширение файла.
exceltable.com
как записать макрос, чтобы он был доступен для всех книг?
и увидел там автозагрузки». указывате там полезного нашла,но с введите код своего книги. В случаи,Личная книга макросов используете каждый день,В окне Для удобства также файлу вместе с & «»: sDirPath макросом сохранить копию названии есть вThe_Prist свои ответы покаsFileName = sFileName ДОЛЖЕН БЫТЬ В возможность «Сохранить копию путь. этой проблемой не макроса. Выберите инструмент когда необходимо использовать. при запуске Excel.Сохранить как приводим ссылку на его именем If = .Names(sPath_in_Names).Value ‘ текущего файла? ‘ приёмах:: Алекс, ну чтоже я ввожу свои,
& IIf(Right(sFileName, Len(sExpansion)) ДРУГОЙ ПАПКЕ, дабы как …».в эту папку могу справиться: подскажите,пожалуйста,как в редакторе макросов:
тот же макросПосле этого макрос будет Вы можете создатьв раскрывающемся списке оригинал (на английском FileName = .FullName если считать не Topic_URL : http://www.planetaexcel.ru/forum.php?thread_id=16506Alex_ST ВЫ так? Я что я их
<> sExpansion, sExpansion, не было конфликтаОказалось очень удобно, кладете файл с правильно сохранить макрос, «File»-«Save Personal.xlsb», а
в других файлах доступен при каждом макроса «Авто_открыть», чтобы
Тип файла языке) . Then MsgBox «Здесь
planetaexcel.ru
Как макросом сохранить копию текущего файла?
удалось, значит путь ‘ DateTime :: Спасибо. Разобрался. ж еще в
просто не успеваю «») при совпадении имен. т.к. при этом макросом чтобы он работал потом закройте редактор рабочих книг, тогда
открытии Excel. сделать это. Вы
выберитеСоздать макрос в Excel нельзя сохранить файл ранее не задавался 08.02.12, 12:00 ‘Только чтобы всё начале писал - читать…If sFileName =ThisWorkbook.Password = «» текущий открытый файлпри открытии экселя
не только с
Visual Basic. можно сохранить егоЧтобы было проще вспомнить, также можете запускайтеКнига Excel с поддержкой можно, запустив средство под таким именем!», и он для Purpose : Сохранение правильно работало нужно «Вы сначала задаетеЩа буду разбираться… ThisWorkbook.FullName Then
Alex_ST не закрывается, а этот файл будет «Эта Книга», а
в личной книге что делает макрос, макрос автоматически при макросов записи макросов или 16, «Ошибка»: GoTo первого раза задаётся копии активного файла не атрибуты файла книге пароль, затем
Беру тайм-аут наMsgBox «Нельзя сохранить: Метод SaveCopyAs требует просто его копия самостоятельно открываться. для любых файлов
Теперь у вас подключена макросов. У нее введите его описание открытии книги..
с помощью редактора REPEAT_ sDirPath = равным ActiveWorkbook.Path sDirPath
‘ Notes : через
сохраняете, затем убираете
осмысливание.
файл под имененм
непосредственного указания пути
сохраняется в указанном
Alex_ST
xls. На форуме
скрытая книга для
всегда одно название
в поле
Прежде чем начать, убедитесь,Нажмите кнопку Visual Basic для Left(FileName, InStrRev(FileName, «»)) = Mid(sDirPath, 3,
Путь сохранения копийSetAttr ActiveWorkbook.FullName, vbReadOnly пароль.
Скорее всего до открытого файла!», vbCritical
и имени сохранения, месте с указанными: По работе на нашла,что надо сохранять хранения макросов, к – Personal.xlsb. Она
Описание
что на лентеСохранить приложений (VBA). После ‘ путь к Len(sDirPath) — 3) хранится в коллекции устанавливать, т.к. этоТоже самое можно завтра, т.к.у нас + vbYesNo, «Ошибка»
а хотелось бы свойствами (всё это своём компе создаю/модернизирую/заполняю в Личной книге которым можно получить всегда открывается при. Можно также оставить доступна вкладка
. создания макроса следует папке сохранения копий
‘ убрать из .Names книги (в ничего не даёт сделать и с на работе сегодняGoTo BEGIN_ по вызову макроса
задаётся в стандартных
разные таблицы. макросов, но когда доступ из любой запуске программы Excel,
это поле пустым.РазработчикЧтобы макросы были доступны
сохранить его для
без имени файла
считанного значения в именованном диапазоне) ‘————————————————————————————— , а
другими атрибутами(только чтение
отмечается «День Корпорации»End If выйти на стандартное
виндовых окнах).По окончании какого-нибудь пытаюсь это сделать другой рабочей книги.
только скрыто. ДаннаяНажмите кнопку
. Если ее нет, при каждом запуске возможности повторного использования .Names(sPath_in_Names).Value = sDirPath
начале «= и
Const sPath_in_Names =
ActiveWorkbook.Password = «ххх»
через GetAttr например).»
(ввиду кризиса -
ThisWorkbook.Password = «1» окно выбора путиВот и подумал, этапа КОПИЮ таблицы выдает ошибку:»Личн.кн.макр.в папке Личная книга макросов книга не является
ОК выполните указанные ниже Excel, создайте их в текущей или
‘ запомнить выбранный в конце « «Path4SaveCopyAs» ‘ имя задаёт пароль НАТ.е. сначала Вы на рабочих местах,ThisWorkbook.SaveCopyAs sFileName и имени сохранения а вдруг гуру надо выкладывать на
автозагрузки должна оставаться где находится находиться доступной по умолчанию. действия. в книге «Personal.xlsb». в других книгах. в диалоге путь sDirPath = sDirPath элемента коллекции .Names, ОТКРЫТИЕ
сохраняемой книги присваиваете а не наThisWorkbook.Password = «» … форума посоветуют как общий диск с открытой-Запись невозможна»- Как в папке автозагрузки
в Excel, поэтомуОткройте вкладкуОткройте вкладку
Это скрытая книгаЕсли понадобится использовать макрос в коллекции .Names & IIf(Right(sDirPath, 1) в котором долженНадо вот так: все эти атрибуты, природе), поэтому, прошуThe_PristAlex_ST можно сделать макрос, паролем на изменение это сделать? Проблема
файлов Excel – ее нужно сначала
ФайлФайл на вашем компьютере, только в той
под именем sPath_in_Names = «», «», храниться путь дляWith ActiveWorkbook
затем сохраняете, потом пардону, с ответами: Алекс, Вы хоть: Да и к осуществляющий аналогичную вункцию (ну, просто для в том,что записав XLSTART: C:Documents and подключить., выберите пункт
и выберите пункт которая открывается при
книге, где он bReadOnlyRecommended = .ReadOnlyRecommended «») ‘ на сохранения копий файла
.WritePassword = «1» убираете. немного торможу, хотя
посмотрели, что я тому же метод в Ёкселе? страховки одних пользователей макрос, я его SettingsUser_NameAppDataRoamingMicrosoftExcelXLSTARTPersonal.xlsbЧтобы создать и схоронитьОткрытьПараметры
каждом запуске Excel. был создан, нажмите ‘ запомнить параметры всякий случай (если
Dim sSuff$: sSuff.ReadOnlyRecommended = TrueDim sFileName As пока ещё вполне предложил? Вы сначала
SaveCopyAs не предполагаетОчевидно, что макрос от действий других…).
правила в VBA,какое-то
Примечание. XLSTART – это
код в личнойи выберите файлы,, а затем —
Для получения сведений
кнопку исходного файла .ReadOnlyRecommended имя было задано
= » [«.SaveCopyAs sFileName String, sExpansion As адекватен, но что
задаете книге пароль, задания опций сохранения
(ну, например, Save_Copy_As)Конечно, можно воспользоваться время он работал, папка для автозагрузки
книге макросов:
с которыми работаете
категорию о выполнении этих
Сохранить
= —(MsgBox(«Рекомендовать открывать в ручную и
& Format(Now, «yyyy/mm/dd.WritePassword = «»
String будет дальше … затем сохраняете, затем
(пароль, предложение открыть должен лежать в
стандартными средствами: а потом исчез… файлов вместе сВыберите инструмент: «РАЗРАБОТЧИК»-«Код»-«Запись макроса».
каждый день. ОниНастроить ленту действий см. статьюили
файл только для при этом не hh-mm’ss»») & «]»
.ReadOnlyRecommended = False
BEGIN_:
Alex_ST
убираете пароль.
только для чтения
личной книге макросов
- открыть папку
Теперь, я его
запуском программы Excel.В появившемся диалоговом окне могут находиться в
. Создание и сохранениеСохранить как чтения?», 36) - верно — без ‘ суффикс кEnd WithsFileName = ThisWorkbook.Name
: The_Prist,спасибо!Тоже самое можно и т.п.)
(Personal.xls)… назначения, скопировать (drag вставляю через редактор Если сохранить файл «Запись макроса», из разных местах. Чтобы
В разделе всех макросов в
так же, как 7) ‘ MsgBox слэша) .Names(sPath_in_Names).Value = имени файла копииЕсли кому-нибудь интересно,sExpansion = Right(sFileName,Всё отлично работает. сделать и сtoliktА вот как & drop’ ом) VBA,он отрабатывает для в данную папку, выпадающего списка «Сохранить выбрать несколько файловНастройка ленты одной книге. при обычном сохранении. Argument 4==vbYesNo 32==vbQuestion, sDirPath ‘ запомнить — дата и то «причёсанный» вариант Len(sFileName) — InStrRev(sFileName, Завтра «дополирую» диалогами другими атрибутами(только чтение: Наверное, я что-то «Сохранить как…», не туда файл, открыть открытого файла, закрываю то он будет в:» выберите опцию в одной папке,в полеПримечание: Но сохранение книги MsgBox Return Values: путь сохранения копий время сохренения копии — в файле. «.») + 1) для задания пассворда через GetAttr например). не понял… закрывая текущего файла? его и поставить Excel,через некот.время открываю открываться вместе с «Личная книга макросов». щелкните каждый изОсновные вкладкиМы стараемся как с макросами происходит vbYes=6, vbNo=7 .SaveCopyAs в коллекции .Names файла Dim FileName,Alex_STsFileName = Application.GetSaveAsFilename …Alex_STТ.к. думал, чтоAlex_ST пароль на открытие… Excel, а макроса программой Excel. Для И нажмите на них, удерживая нажатойустановите флажок можно оперативнее обеспечивать несколько иначе, поскольку FileName .ReadOnlyRecommended = под именем sPath_in_Names sExp$, sDirPath$, sFullFilePath$,: Приходится у себяIf sFileName =А как бы: Я, конечно, естественно, пользователь класса Alex_ST: Сразу оговариваю: Но уж больно там нет!?… версий старше 2007 кнопку OK. клавишу SHIFT.Разработчик вас актуальными справочными необходимо использовать специальный bReadOnlyRecommended ‘ восстановить sFullFilePath = sDirPath sNewPath$ Dim bReadOnlyRecommended на компе вести «False» Then Exit при сохранении копии смогу сделать InputBox уж сумеет как-томакросы типа это не удобно,Guest путь к папкеТеперь выберите инструмент: «РАЗРАБОТЧИК»-«Код»-«ОстановитьОткройте вкладку. материалами на вашем формат файла «с параметры исходного файла & FileName ‘ As Boolean With несколько учётных файлов, Sub задавать «Рекомендовать открытие для задания пути в макросе подогнатьSub Save_File_As() т.к. надо после: А если выбрать автозагрузки будет следующим: запись».РазработчикНажмите кнопку языке. Эта страница поддержкой макросов». Поэтому End With End полный путь сохранения ActiveWorkbook FileName = а их копииsFileName = sFileName только для чтения?» для SaveCopyAs, но, под себя SaveCopyAsActiveWorkbook.SaveAs _ копирования закрыть свой «Все открытые книги»? C:Program FilesMicrosoft OfficeOffice12Xlstart.Откройте редактор Visual Basic:и нажмите кнопкуОК переведена автоматически, поэтому при попытке сохранить Sub вместе с полным
planetaexcel.ru
.Name ‘ например,
Привет, сейчас мы рассмотрим ситуацию, когда у Вас возникла необходимость в Excel сохранять файл с определенным названием, которое необходимо сформировать из значения ячейки или даже нескольких. В этой заметке я приведу простой пример реализации данной задачи.
Содержание
- Исходные данные
- Сохранение файла Excel с названием из ячейки — с привязкой к этой ячейке
- Добавление кнопки в Excel для запуска макроса
- Сохранение файла Excel с названием из ячейки — без привязки к ячейке
- Сохранение файла Excel с названием, которое сформировано из значений двух ячеек
Исходные данные
Сначала давайте разберем исходные данные, которые я буду использовать в примерах. Пусть это будет некая абстракция марок автомобилей с указанием их VIN номера.
Примечание! Я использую Excel 2013.
В зависимости от конкретных требований и условий, задачу можно реализовать по-разному, хотя принцип будет один и тот же, в этой статье мы рассмотрим несколько вариаций реализации.
Начнем мы с самой простой ситуации, когда заранее известна ячейка, на основе которой будет сформировано имя файла, и адрес этой ячейки изменяться не будет.
Заметка! Этапы разработки программы – как создаются и проектируются программы?
Итак, данные у нас есть, теперь необходимо написать процедуру на VBA (макрос), которая брала бы значение из конкретной ячейки, в данном случае это будет ячейка B14, и присваивала бы это значение имени файла.
Ниже представлен код процедуры, я его подробно прокомментировал. Единственное скажу, что я во всех примерах сохраняю новые файлы без макросов (расширение .xlsx), т.е. по факту будет один файл с поддержкой макросов, а все производные — без.
Если нужно сохранять макрос в каждом файле, т.е. файлы с поддержкой макросов (расширение .xlsm), то необходимо просто указать другой тип файла при сохранении, а именно xlOpenXMLWorkbookMacroEnabled, в процедурах в комментариях я это указываю.
Открываем в Excel редактор Visual Basic, и вставляем код следующей процедуры в исходный код этой книги (ЭтаКнига, открыть двойным кликом) или в модуль, который Вы предварительно должны создать.
Примечание! Для того чтобы открыть редактор 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:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом 'Включаем вывод сообщений Application.DisplayAlerts = True 'Сообщение с результатом выполнения процедуры MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат" End Sub
После сохранения файла запустите макрос («Макросы -> Выполнить -> SaveFile»).
В результате в моем случае процедура успешно выполнилась, файл сохранился с названием «Марка Авто 1», данное значение взято из ячейки B14, о чем будет свидетельствовать сообщение в конце процедуры. Файл сохранен в каталоге, где и исходный файл (во всех примерах ниже прописано то же самое, т.е. сохранение рядом с исходником, но это Вы можете изменить).
Заметка! Статический анализ кода в теории и на практике.
Добавление кнопки в Excel для запуска макроса
Каждый раз открывать окно с макросами и выбирать нужный макрос не очень удобно, поэтому можно легко добавить кнопку где-нибудь рядом с данными и просто нажимать ее. Это делается следующим образом «Вкладка Разработчик -> Вставить -> Кнопка (элемент управления формы)».
Затем выберите место, где вставить кнопку, и нажмите туда. После этого появится окно назначения действия, т.е. нужно выбрать, какой макрос запускать при нажатии этой кнопки, выбираем наш макрос, т.е. SaveFile, и нажимаем «ОК».
В итоге появится кнопка с названием «Кнопка», это название лучше изменить, например, на «Сохранить файл». Для этого нажмите правой кнопкой мыши на кнопку и выберите настройки «Изменить текст». В итоге у Вас должно получиться что-то вроде этого.
Заметка! ТОП 7 популярных языков программирования.
Сохранение файла Excel с названием из ячейки — без привязки к ячейке
Теперь давайте представим, что заранее мы не можем определить, какая именно ячейка будет формировать название файла (может B14, а может и нет), поэтому мы можем немного скорректировать алгоритм таким образом, чтобы он брал значение из ячейки, которая является активной, но в этом случае Вы, конечно же, предварительно, должны выбрать ее (т.е. встать на нее).
Замените код процедуры следующим кодом, который совсем немного, но изменен.
Sub SaveFile() 'Объявление переменных Dim CellValue As String Dim Path As String Dim FinalFileName As String 'Временно отключаем показ вспомогательных сообщений Application.DisplayAlerts = False 'Задаём каталог сохранения файла (в данном случае текущий каталог) Path = ThisWorkbook.Path & "" 'Проверка значения ячейки If ActiveCell.Value = "" Then MsgBox "В ячейке отсутствует значение", vbCritical, "Ошибка!" Exit Sub End If 'Получаем значение активной ячейки CellValue = ActiveCell.Value 'Формируем итоговый путь и название файла FinalFileName = Path & CellValue 'Сохраняем файл ActiveWorkbook.SaveAs FileName:=FinalFileName, _ FileFormat:=xlOpenXMLWorkbook 'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом 'Включаем вывод сообщений Application.DisplayAlerts = True MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат" 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 If Range("B14").Value = "" Or Range("D14").Value = "" Then MsgBox "В ячейке отсутствует значение", vbCritical, "Ошибка!" Exit Sub End If 'Складываем значения из двух ячеек B14 и D14 CellValue = Range("B14").Value & " - " & Range("D14").Value 'Формируем итоговый путь и название файла FinalFileName = Path & CellValue 'Сохраняем файл ActiveWorkbook.SaveAs FileName:=FinalFileName, _ FileFormat:=xlOpenXMLWorkbook 'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом 'Включаем вывод сообщений Application.DisplayAlerts = True MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат" End Sub
Запускаем макрос.
Все ОК, файл создан.
Заметка! Как измерить сложность кода программы при программировании?
Если вдруг нужно реализовать без привязки к конкретным ячейкам, например, значения хранятся в определённых столбцах, но конкретная строка неизвестна Вам заранее. Например, у меня несколько строк со значениями, и какие конкретно значения взять за основу названия файла, я хочу указывать самостоятельно, непосредственно перед сохранением, но при этом не редактировать код процедуры.
Для этого мы снова внесем изменения в нашу процедуру, которая будет работать от активной ячейки (смещение от активной ячейки), только с условием того, что выбран столбец с теми значениями, которые необходимо использовать.
Код процедуры
Sub SaveFile() 'Объявление переменных Dim CellValue As String Dim Path As String Dim FinalFileName As String 'Временно отключаем показ вспомогательных сообщений Application.DisplayAlerts = False 'Задаём каталог сохранения файла (в данном случае текущий каталог) Path = ThisWorkbook.Path & "" 'Проверка номера столбца If ActiveCell.Column <> 2 Then MsgBox "Указан некорректный столбец", vbCritical, "Ошибка!" Exit Sub End If 'Проверка значения ячейки If ActiveCell.Value = "" Then MsgBox "В ячейке отсутствует значение", vbCritical, "Ошибка!" Exit Sub End If 'Получаем значение активной ячейки CellValue = ActiveCell.Value 'Смещаемся на 2 столбца, относительно активной ячейки ActiveCell.Offset(0, 2).Select 'Складываем значения из двух ячеек CellValue = CellValue & " - " & ActiveCell.Value 'Формируем итоговый путь и название файла FinalFileName = Path & CellValue 'Сохраняем файл ActiveWorkbook.SaveAs FileName:=FinalFileName, _ FileFormat:=xlOpenXMLWorkbook 'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом 'Включаем вывод сообщений Application.DisplayAlerts = True MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат" End Sub
Становитесь на любую ячейку со значением в столбце B, и запускайте макрос.
Заметка! Опрос. Какой операционной системой Вы пользуетесь?
У меня на этом все, надеюсь, материал был Вам полезен, пока!