How to close an Excel workbook using VBA and macros, including how to save the file before you close it or discard any changes.
Sections:
Selecting Which Workbook to Close
Close Workbook While Saving Changes
Close Workbook Without Saving Changes
Let the User Decide to Save Changes or Not
Notes
Selecting Which Workbook to Close
First, we need to tell the macro to choose the current workbook to close or another workbook to close.
Current Workbook
We use this piece of code to close the current or currently active workbook and close that.
Other Workbook
We use this piece of code to close any specific open workbook.
Workbooks("test.xlsx").Close
Replace test.xlsx with the name of the file that you want to close.
Close Workbook While Saving Changes
To have Excel automatically save any changes for the workbook that you want to close, just put True behind the close workbook code from above like this:
ActiveWorkbook.Close True
or, to close a specific file like this:
Workbooks("test.xlsx").Close True
Close Workbook Without Saving Changes
To have an Excel window close WITHOUT saving any changes, just put False behind the close workbook code from above like this:
ActiveWorkbook.Close False
or, to close a specific file like this:
Workbooks("test.xlsx").Close False
Let the User Decide to Save Changes or Not
You use the basic code from the first section and don’t include a True or False after it and a dialog box will open asking if you want to save the file or not; it looks like this:
Close the currently active or visible workbook:
Close a specific workbook:
Workbooks("test.xlsx").Close
Notes
You may run into issues with messages popping up depending on your implementation of this code and your setup and it can help to turn off ScreenUpdating for Excel. Make sure to turn it back on when you are finished though.
If Application.DisplayAlerts is set to False before you close the workbook, you won’t see a popup asking if you want to save it or not before closing it. If this is the case, you may lose data if you wanted to save the file before closing it, so test your code on a sample workbook first.
Download the sample files for this tutorial to test everything out.
Similar Content on TeachExcel
Open Excel Workbook Using VBA Macros
Tutorial:
Simple way to open an Excel workbook using VBA and macros.
Syntax
Workbooks.Open («File…
Macro to get Data from Another Workbook in Excel
Tutorial:
Macro to get data from a workbook, closed or open, over a network or locally on your comp…
Get User Submitted Data from a Prompt in Excel using VBA Macros
Tutorial: How to prompt a user for their input in Excel.
There is a simple way to do this using VBA …
Interactive Clickable Buttons and Interface Without Using VBA/Macros in Excel
Tutorial:
How to make your Excel dashboards and worksheets more interactive and easier to view and …
Loop through a Range of Cells in Excel VBA/Macros
Tutorial: How to use VBA/Macros to iterate through each cell in a range, either a row, a column, or …
Kill Command in Excel (Delete Files Using VBA)
Tutorial:
How to safely remove, delete, kill any Excel file, or other file, using VBA Macros in Exc…
Subscribe for Weekly Tutorials
BONUS: subscribe now to download our Top Tutorials Ebook!
Skip to content
Как защитить рабочий лист в книге перед закрытием
На чтение 2 мин. Просмотров 1.5k.
Что делает макрос: Если Вам постоянно приходится думать о защите листов, прежде чем отправить свои файлы, этот макрос может помочь вам защитить рабочие листы перед закрытием
Содержание
- Как макрос работает
- Код макроса
- Как работает этот код
- Как использовать
Как макрос работает
Этот код запускается событием рабочей книги (BeforeClose— перед закрытием). При нажатии на кнопку закрыть срабатывает событие и запускается макрос. Макрос автоматически защищает рабочий лист, а затем сохраняет книгу
Код макроса
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'Шаг 1: Защищает лист с паролем Sheets("Отчет1").Protect Password:="Akademia_Excel" 'Шаг 2: Сохраняем книгу ActiveWorkbook.Save End Sub
Как работает этот код
- На шаге 1 мы явно указываем, какой лист мы хотим защитить — Отчёт, в данном случае. Мы также прописываем аргумент Password (пароль): = «Akademia_Excel». Это строка установит пароль для снятия защиты. Password (пароль) — аргумент не является обязательным. Если его не указывать, то лист будет по-прежнему защищен, но снять защиту сможет любой желающий. Кроме того, следует помнить, что пароли Excel чувствительны к регистру, так что обратите внимание на заглавные и строчные буквы в пароле.
- Шагом 2 мы говорим Excel сохранить книгу. Если мы не сохраним, то защита не будет действовать при следующем открытии книги.
Как использовать
Для реализации этого макроса, Вам нужно скопировать и вставить его в код события Workbook_BeforeClose. Размещение макроса здесь позволяет запускать макрос непосредственно перед закрытием excel-файла.
- Активируйте редактор Visual Basic, нажав ALT + F11.
- В окне проекта найдите свой проект/имя рабочей книги и нажмите на знак плюс рядом с ним в чтобы увидеть все листы и модуль ЭтаКнига.
- Правой кнопкой мыши нажмите на модуле ЭтаКнига и выберите View Code.
- В левой части окна выберите объект WorkBook (Excel автоматом предложит написать макрос для события Workbook_Open (можете позже удалить его за ненадобностью)
- В правом выпадающем списке свойство BeforeClose
rustim86 0 / 0 / 0 Регистрация: 01.09.2015 Сообщений: 50 |
||||
1 |
||||
Скрытие/отображение рабочих листов макросом22.01.2016, 09:26. Показов 22454. Ответов 8 Метки нет (Все метки)
Всем здравствуйте! Подскажите, пожалуйста, есть ли возможность реализовать в VBA скрытие/отображение листов по признаку закрытый лист сделать открытым, и наоборот. Или код приведенный ниже сделать как-то компактнее что ли, дабы не писать команду для каждого отдельного листа с его названием. Заранее благодарю.
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
22.01.2016, 09:50 |
2 |
|||
закрытый лист сделать открытым, и наоборот Можно, но надо позаботиться о том, чтобы в любой момент хотя бы один лист был видимым.
1 |
Заблокирован |
||||
22.01.2016, 09:52 |
3 |
|||
однако хотя бы один лист в книге должен быть отображен, имейте ввиду.
1 |
0 / 0 / 0 Регистрация: 01.09.2015 Сообщений: 50 |
|
22.01.2016, 09:58 [ТС] |
4 |
Казанский, благодарю! Добавлено через 1 минуту
0 |
0 / 0 / 0 Регистрация: 17.03.2023 Сообщений: 9 |
|
24.03.2023, 09:46 |
5 |
Здравствуйте, уважаемые форумчане! Спрошу в этой теме. Как при помощи снятии галочек в ечейке с помощью кода скрывать листы с таким же именем как и в строке таблицы, ну и соответственно при установке галочки лист снова отображается. Подскажите код для файла, который приложил
0 |
АЕ ᴁ® 3070 / 1736 / 361 Регистрация: 13.12.2016 Сообщений: 5,938 Записей в блоге: 4 |
||||||||
24.03.2023, 10:05 |
6 |
|||||||
В другой теме уже спрашивал, но может не в той теме задаю вопрос, поэтому нет ответа или пока некогда ответить. Может пора создать свою тему? Добавлено через 5 минут
Добавлено через 4 минуты
вставить, либо Range(«E4:E8») ограничить…
1 |
0 / 0 / 0 Регистрация: 17.03.2023 Сообщений: 9 |
|
24.03.2023, 11:00 |
7 |
АЕ, спасибо! Просто, когда создаешь свою тему, делают замечание зачем плодить темы, если они уже есть. Задаю вопрос в теме к которой он относится. Помогите еще, пожалуйста, что надо добавить в этот код, чтобы по снятию/установке галочки скрывались/показывались строки, с 1 по 5 например, на необходимом листе. Заранее благодарю!
0 |
ᴁ® 3070 / 1736 / 361 Регистрация: 13.12.2016 Сообщений: 5,938 Записей в блоге: 4 |
|
24.03.2023, 11:30 |
8 |
Помогите еще, пожалуйста, Поэтому и говорю. Создайте тему. Я же вижу, что ваша хотелка бесконечна и однообразна до безобразия.
0 |
0 / 0 / 0 Регистрация: 17.03.2023 Сообщений: 9 |
|
24.03.2023, 11:51 |
9 |
АЕ, пока вопрос не снят, поэтому и однообразен.
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
24.03.2023, 11:51 |
Помогаю со студенческими работами здесь Разделение списка расчетных листов на листы или файлы PDF макросом Сбор рабочих листов из внешних файлов с последующим выполнением другого макроса Объекты Excel VBA: рабочие листы. Примеры структур рабочих листов в приложении, их связь и изменчивость Скрытие и отображение столбцов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 9 |
закрытие екселя с сохранением и без предупреждения (Макросы/Sub)
Смотрите также клавиатуре) для нажатия кнопки: просто скрывает формулу перехватывать события на сценарии. Она такая. с Книги3 в
Mishel915 одном Макросе1) книги. ‘и закрываю окно
: Кнопочка с решёткой,
As Excel.Application) app.ActiveWorkbook.Close
как. По-видимому, работающий
:
другое сообщение, хотя
файл Эксель, да
True)85Muslim85
Не хочу размещать
Private Sub CommandButton1_Click()
от пользователя уровне Application. В коллекции Workbooks
Книгу1, потом перейти
:Если команда о редактора VBA
однако
0 app.Quit End
макрос не дает
Mary_Rustle ничего принципиального я так чтобы иWorkbooks.Close True: добрый день, скажите
кнопки на форме
Unload Me Setметод Unload (имяMishel915 фиксируется определённый порядок в Книгу2, потом
EducatedFool !
закрытии книг поступаетВозможно и ВамGlen SubА в самой выполнить команду Quit., а какой смысл
не поменяла: в скрытых процессах' закрыть без как закрыть ексель
- так сделай
UserForm1 = Nothing формы) — выгружает: Работает так : чередования открытых книг,
перейти в Книгу1,
Спасибо за этюд.
из Книги1, то
excelworld.ru
VBA Access: как закрыть книгу Эксель без сохранения?
это поможет.: не получается код
книге прописать Можно попробовать накидать открывать файл Excel
Помогите, пожалуйста, это его тоже не сохранения (без запроса (полностью выйти) с ее масенькой (все End Sub форму из памятиSub Макрос1() Dim
который не меняется.
после чего податьДа, необходимо было закрывается только Книга1.Glen прикрепитьSub QE() Dim нажатий клавиш, типа и запускать макрос, очень большая проблема, было. подтверждения пользователя, даже сохранением под таким размеры и положение=1flower2005 и закрывает её wb As Workbook Код размещён в команду о закрытии подойти к ThisWorkbook Книга2 остаётся открытой.:Glen obj As ObjectКод Sub closeE() если файл потом уже долго бьюсь
Я делаю следующее: если .DisplayAlerts = же названием и — прекрасно работает.Пусть: А может быть,CердЖиГ
For Each wb Книге3, а запускается двух книг, то с другой стороныОчевидно это происходит
ОлеггелО:
Set obj = Set sh =
закрывается без сохранения над ней, никаких
Private Sub Кнопка0_Click() True) без предупреждения в проекте существует стоит обработать событие: Всем спасибо уже In Workbooks If с Книги1. Как закрывается только Книга1? ! из-за того, что,Sub rr() CreateObject(‘Имя класса’) obj.ExcelQuit CreateObject(‘WScript.Shell’) sh.SendKeys (‘{F10}{Down (oBook.Close успехов! FullFilePath = «C:Папка7Workbooks.Close Falseскажите что в
Userform1, тогда: UserForm_KeyPress и, сделал так :-) wb.Name <> Application.ActiveWorkbook.Name только в коде Книга2 остётся неДостаточно всего лиш управляющая книга (книгаспс.Set VBProj = Application End SubЕсли 9}{Enter}{Right}{Enter}’) End SubFalseMary_Rustle
свод реестров 2015_9.xlsm»’ закрыть Excel этом коде неPrivate Sub UserForm_KeyPress(ByValесли это клавиша
CyberForum.ru
Надо закрыть через VBA Excel ,без сохранения и без выскакивания запросов на сохранеие
Private Sub CommandButton1_Click() And wb.Name <> подошла очередь закрыть закрытой?Sub test() Dim
с управляющим макросом)Mishel915
ActiveWorkbook.VBProject установлен ODE, то Здесь надо подрегулировать)? Этот макрос, что: Ответ найден!
Dim app As (закроется только если так(((( KeyAscii As MSForms.ReturnInteger) ESC, выполнить закрытиеUnload userform1 ThisWorkbook.Name Then wb.Close Книгу1, код её4. Если перейти wb As Workbook
закрывается первой, после: Всем доброе времяSet VBComp = создание такой dll цифру в {Down ли, создает какой-тоВидимо плохо раньше Object Set app в этом же200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub вава() If KeyAscii =
формы, а наActiveWorkbook.Save Next Application.ActiveWorkbook.Close End закрывает, после чего с Книги3 в
For Each wb чего выполнение Макроса1
суток ! VBProj.VBComponents(«Лист3») займет несколько минут
9}. Да и другой файл, который старалась
= CreateObject(«Excel.Application») With Application больше нетRange(«A1») = 1 27 Then MsgBox другие клавиши не
End Sub Sub выполнение кода прекращается Книгу1, потом перейти In Workbooks If
прекращается.Две книги ExcelSet CodeMod =Glen работает это только потом используется?Изменила код следующим app .Workbooks.Open FullFilePath
CyberForum.ru
Закрыть окно редактора VBA макросом (Макросы/Sub)
открытых и неWorkbooks.Application.DisplayAlerts = False
‘Была нажата ESC, реагировать.Pavel55СердЖиГ
так как код в Книгу2, потом wb.Name <> ThisWorkbook.NameТакой вопрос :
(Книга1 и Книга2) VBComp.CodeModule
: Доброго дня. с листа Excel,
Mary_Rustle образом:
End With app.Run
сохраненных книг,Excel.ActiveWorkbook.SaveAs («rl.xlsm»)
прячем форму’ UserForm1.Hideflower2005: )) ну, всё
: Уважаемые форумчане! запущен с Книги1. перейти в Книгу1,
Then wb.Close Next какой должен быть закрываются в одном
With CodeModВ работе макрос а из среды
:Private Sub Кнопка0_Click()
"diap" app.Quit Set' иначе будет
Workbooks.Close Else 'ничего не
: Кто тебя учил
правильно) только выНапомните, плиззз, команды
Все книги, которые потом перейти в
End SubКнига3 должна код для закрытия
макросе, например так
lLineNum = .CreateEventProc("Change",
переносит модуль процедуры
разработки не работает.Казанский FullFilePath = «C:папка7 app = Nothing запрашивать подтверждения сохранения,End Sub делаем End If выгружать (unload) форму спрашивали о сохранении в VBA для
всех книг, записанных :
стоят в очереди Книгу2, после чего оставаться для выбора
«Worksheet») события на новыйoldpasp, спасибо) Действительно глупость.
свод реестров 2015_9.xlsm»
excelworld.ru
Как в одном макросе закрыть все книги Excel?
DoCmd.SetWarnings False DoCmd.RunSQL при .DisplayAlerts =KSV
End SubКстати, а в кнопке? Не формы, а сами сохранения и закрытия на закрытие после
подать команду о
нового действия. в Макросе1, неКод:lLineNum = lLineNum лист.: Так как макрос Исправила на (oBook.Save). Dim app As «DELETE Свод_реестров.* FROM True)
: все правильно какие элементы есть руби сук, на сохраняете активную книгу
userform.
Книги1, теперь не закрытии двух книг,Не всё пока
зависимо от порядкаSub Макрос1() On + 1При этом почему расположен в какой-либо
Штурмaн Object Dim oBook Свод_реестров» DoCmd.TransferSpreadsheet acImport,Application.Quit200?’200px’:»+(this.scrollHeight+5)+’px’);»>’ подавляет предупреждения Excel на форме? котором сидишь! Напиши
) или намСпасибо! закроются из-за того, то закрываются обе получается. расположения книг в Error Resume Next.InsertLines lLineNum, «call то само открывается книге, то выполнив: Помогите чайнику.Надо закрыть As Object Set , «Свод_реестров», FullFilePath,85Muslim85
Workbooks.Application.DisplayAlerts = FalseКод может и в коде кнопки надо было догадатьсяPavel55 что код уже книги!1. Если перейти
Макросе1. Очевидно в Workbooks(«Книга1»).Close (SaveChanges) Workbooks(«Книга2»).Close Izm(Target)» окно редактора VBA.
команду через VBA Excel app = CreateObject(«Excel.Application») True, «Свод_реестров» CurrentDb.Execute
: все отлично)) спасибки…
’ сохраняет книгу не сработать, если, me.hide — это ?): А что значит не выполняется.Таким образом в с Книги3 в Макросе1 необходимо определить
(SaveChanges) On ErrorEnd With
По типу Alt+F11.Application.Quit получаем запрос ,без сохранения и Set oBook = «DROP TABLE [Свод_реестров_ОшибкиИмпорта]» вот чего я
в файл С например, фокус на переведет тебя вСердЖиГ сохранить? У формыКод будет срабатывать 3-ем сценарии код Книгу1, после чего
управляющую книгу, т. GoTo 0 EndVBProj.VBE.MainWindow.Visible = FalseПодскажите как кодом на сохранение без app.workbooks.Open(FullFilePath) app.Run «diap» DoCmd.SetWarnings True MsgBox хотел) ДРУГИМ именем TextBox(e).Только ListBox
команду в вызывающей: Павел, сорри, уже нет такой функции всегда, если его почемуто не видит подать команду о е. книгу с SubМакрос1 находится вEnd Sub его закрыть.А если предварительно
выскакивания запросов на oBook.Close False app.Quit «Импорт успешно завешен»Workbooks.Application.DisplayAlerts = False
Excel.ActiveWorkbook.SaveAs («rl.xlsm»)К этой процедуре процедуре после show
вечер был :-)А закрыть можно запускать с книги Книги2. закрытии Книги1, то которой поступила команда, Книге3. Проэкт состоитОлеггелОGlen закрыть книгу без сохранеие Set app = End SubРаньше всеExcel.ActiveWorkbook.Save’ сохраняет книгу надо обратиться с — сделай там,Димит так в которой онMishel915 закрывается! и закрыть её из трёх книг:: Вроде так помогает сохраненияpalva Nothing DoCmd.SetWarnings False
работало хорошо заApplication.Quit в файл С фактическим параметром KeyAscii что требуется, а
: Не получается закрытьSub Макрос1() размещён.: Установил причину не2. Если перейти последней. — Книга1, Книга2,GlenSet VBProj =Application.ActiveWorkbook.Close 0 то
: Закрыть одну из DoCmd.RunSQL «DELETE Свод_реестров.*
исключением следующего: когдаMary_Rustle ТЕМ ЖЕ именем — как это затем выгружай форму! форму при нажатии’или такЕсли код запускать срабатывания кода
CyberForum.ru
VBA сохранить&закрыть userform
с Книги3 вEducatedFool
Книга3., здравствуйте. Я так ActiveWorkbook.VBProject работа макроса прекращается
книг, если макрос
FROM Свод_реестров» DoCmd.TransferSpreadsheet уже после успешного: Добрый день!Excel.ActiveWorkbook.Save
— ПРОШУ ПРОЩЕНИЯJohnyДимит
ESC!!
Unload UserForm1 ‘закрыть
с других книг,Sub test() Dim Книгу1, потом перейти
: Sub test() Dim
Если команда о
делал (топорно конечно),
VBProj.VBE.MainWindow.Visible = False (книга то закрывается) находится в другой,
acImport, , «Свод_реестров», выполнения модуля яМои попытки найти’ закрывает книгу
Walkerу: Не хочу размещатьПомогите!!
и выгрузить из
то на его
wb As Workbook
в Книгу2, после
wb As Workbook закрытии книг поступает добавьте перед «EndGlenЗначит надо объединить можно так: FullFilePath, True, «Свод_реестров» пыталась открыть файл нужное не увенчались
Workbooks.CloseПочему нельзя Unload кнопки на форме
planetaexcel.ru
VBA Excel закрытие формы на листе
flower2005 памяти форму работу будет влиять For Each wb
чего подать команду
For Each wb из Книги2, например sub»: Код не покажу. эти команды: можноКод Application.DisplayAlerts =
CurrentDb.Execute «DROP TABLE эксель, мне выдавалось успехом, помогите пожалуйста!’ закрыть с
в кнопке? — как и: Разместите на форме’или так
порядок размещения открытых In Workbooks If о закрытии двух In Workbooks If так :
SendKeys «%{F11}», True ‘делаюНе знаю как сделать dll (AddIn), False Windows(‘Книга2’).Close Application.DisplayAlerts [Свод_реестров_ОшибкиИмпорта]» DoCmd.SetWarnings True следующее предупреждение:Нужно после запуска сохранением (без запросаА куда Я где завязать закрытие кнопку. Установите еёUserForm1.Hide ‘скрыть форму книг в коллекции wb.Name <> ThisWorkbook.Name
книг, то закрываются wb.Name <> ThisWorkbook.NameКод: активным окно редактора его тут правильно где будут выполняться = True Закрыть MsgBox «Импорт успешно
Теперь не понятно модуля Эксель через подтверждения пользователя, даже выйду, если форма моей формы на свойство Сancel какEnd Sub Workbooks! Очевидно на
Then wb.Close Next обе книги! Then wb.Close NextApplication.Run «‘Книга3.xls’!Макрос1″,то закрываются VBA оформить. эти действия весь Excel из завешен» End Sub по какой причине, Аксесс полностью закрыть
если .DisplayAlerts = vbModeless? нажатие Esc (на True. Напишите код
метод Hide - такой случай необходимо End Subв 3-ем3. Если перейти ThisWorkbook.Close End Sub обе (все в
SendKeys «%{F4}», TrueUdik
Public Sub ExcelQuit(app макроса не знаюКазанский
CyberForum.ru
он стал выдавать
I assume from your question that you want to create a kind of navigation that hides all but the active sheet.
If this is what you’re looking for, you’ll need something like the following code:
In a Module:
Global Const cStrHomeSheet As String = "Home" Public Sub subGotoSheet(strSheetName As String) On Error GoTo ErrorHandler Dim wsActive As Worksheet Application.ScreenUpdating = False Set wsActive = ActiveSheet Sheets(strSheetName).Visible = xlSheetVisible Sheets(strSheetName).Activate wsActive.Visible = xlSheetVeryHidden Application.ScreenUpdating = True Exit Sub ErrorHandler: MsgBox "Cannot find worksheet " & strSheetName End Sub Public Sub subGotoHomeSheet() subGotoSheet cStrHomeSheet End Sub Public Sub subGotoSheetFromCaller() subGotoSheet Application.Caller End Sub Public Sub subHideAll() Dim ws As Worksheet Application.ScreenUpdating = False ActiveWindow.DisplayWorkbookTabs = False Sheets(cStrHomeSheet).Visible = xlSheetVisible Sheets(cStrHomeSheet).Activate For Each ws In Sheets If ws.Name cStrHomeSheet Then _ ws.Visible = xlSheetVeryHidden Next Application.ScreenUpdating = True End Sub Public Sub subShowAll() Dim ws As Worksheet Application.ScreenUpdating = False ActiveWindow.DisplayWorkbookTabs = True For Each ws In Sheets ws.Visible = xlSheetVisible Next Application.ScreenUpdating = True End Sub
In addition, place the following code in the ThisModule
module:
Private Sub Workbook_Open() subHideAll End Sub
Explanation & usage:
The code in the ThisWorkbook
module will hide all but the home worksheet up loading the workbook. (To hide the fact that you’re switching worksheets, it also hide the worksheet tab bar at the bottom left of the window).
By calling a subGotoSheet "DestinationSheet"
you can now «activate», i.e. unhide the target sheet — the old sheet will be hidden. To make your life a bit easier, you can also call subGotoHomeSheet
— and even more important, use subGotoSheetFromCaller
. This one is really neat if you combine it with buttons (or any shapes for that matter): if you insert a button or shape into a worksheet, assign this macro to it. You now only need to name the item (using the name box left of the formula field) according to your target sheet — and the button will automatically get you to desired sheet!
Last but not least, I assume you’ll also need a «developer mode» in which you’ll see and edit all sheets. To do this, run subShowAll
, to go back, run subHideAll
. I’d recommend you to assign shortcut keys to both macros, so you can quickly switch between developer and user mode.