Артем
Гость
#4
27.12.2007 11:47:48
{quote}{login=Лузер}{date=27.12.2007 11:46}{thema=}{post}Артем! Просят закрыть без сохранения, а ты предлагаешь сохранить.
ActiveWorkbook.Saved = True — говорит, что книга уже сохранена, ничего не сохраняя
или
ActiveWindow.Close False — закрыть без сохранения{/post}{/quote}
ага, ошибся, сорри
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.
Что делает макрос: Данный макрос позволяет закрыть все открытые рабочие книги одновременно.
Содержание
- Как макрос работает
- Код макроса
- Как работает этот код
- Как использовать
Как макрос работает
В этом макросе, коллекция Workbooks перебирает все открытые рабочие книги. По мере того, как макрос проходит через каждую книгу, он сохраняет и закрывает их.
Код макроса
Sub ZakritVseKnigi() 'Шаг 1: Объявляем переменные Dim wb As Workbook 'Шаг 2: Перебираем все открытые книги For Each wb In Workbooks 'Шаг 3: Закрываем wb.Close 'Шаг 4: Сохраняем изменения SaveChanges:=True Next wb End Sub
Как работает этот код
- Объявляем переменную, которая представляет собой объект книга. Это позволит перебирать все открытые книги.
- С помощью цикла просто проходит через все открытые книги.
- Закрываем книгу (Excel затем выдаст сообщение с предложением сохранить изменения).
- Сохраняем изменения. Если Вы не хотите, чтобы их сохраняли, нужно изменить аргумент Savechanges значение с True на false.
Как использовать
Лучшее место, чтобы сохранить этот макрос — это ваша книга личных макросов. Таким образом, макрос всегда будет доступен для вас. Книга личных макросов загружается при запуске Excel. В окне VBE проекта, он назван personal.xlsb.
- Активируйте редактор Visual Basic, нажав ALT + F11 на клавиатуре.
- Щелкните правой кнопкой мыши personal.xlb в окне Project.
- Выберите Insert➜Module.
- Введите или вставьте код во вновь созданном модуле.
Если вы не видите personal.xlb в окне проекта, он еще не существует. Вы должны записать макрос, используя книгу личных макросов в качестве конечного пункта.
Чтобы записать макрос в личной книге макросов, выберите пункт: Личная книга макросов в диалоговом окне записи макроса перед началом записи. Просто записать пару кликов, а затем остановить запись. Вы можете сбросить записанный макрос и заменить его с этим.

Эти макросы помогут вам закрыть все открытые файлы Excel, оставив лишь текущий файл.
Выбирайте любой из них — они мало чем отличаются.
Первый оставляет открытой только активную книгу, независимо от того, из какого файла запущен этот макрос:
Sub CloseAllWorkbooks1() ' закрываем все книги, кроме текущей (активной) Dim wb As Workbook: Application.ScreenUpdating = False For Each wb In Workbooks ' перебираем все открытые книги If Not wb Is ActiveWorkbook Then ' если это не этот файл If wb.Windows(1).Visible Then wb.Close ' закрываем его End If Next wb End Sub
Второй макрос оставляет открытой только ту книгу, из которой запущен этот самый макрос, независимо от того, какая книга активна на момент запуска:
Sub CloseAllWorkbooks2() ' закрываем все книги, кроме той, из которой запущен макрос Dim wb As Workbook: Application.ScreenUpdating = False For Each wb In Workbooks ' перебираем все открытые книги If Not wb Is ThisWorkbook Then If wb.Windows(1).Visible Then wb.Close Next wb End Sub
Третья версия макроса отличается от первой лишь тем, что все файлы закрываются с сохранением изменений:
(первый макрос в этом случае выдаёт диалоговое окно — сохранять файл, или нет)
Sub CloseAllWorkbooks3() ' закрываем все книги, кроме текущей (активной), С СОХРАНЕНИЕМ изменений Dim wb As Workbook: Application.ScreenUpdating = False For Each wb In Workbooks ' перебираем все открытые книги If wb.Windows(1).Visible = True And (Not wb Is ActiveWorkbook) Then ' закрываем с сохранением только изменённые файлы wb.Close (Not wb.Saved) ' ранее сохранённые файлы просто закрываются End If Next wb End Sub
Ну и четвертый вариант — тоже закрывает все открытые файлы, только изменения в этих файлах не сохраняются:
Sub CloseAllWorkbooks4() ' закрываем все книги, кроме текущей (активной), БЕЗ СОХРАНЕНИЯ изменений Dim wb As Workbook: Application.ScreenUpdating = False For Each wb In Workbooks ' перебираем все открытые книги If wb.Windows(1).Visible Then If Not wb Is ActiveWorkbook Then wb.Close False Next wb End Sub
Открытие книги Excel из кода VBA. Проверка существования книги. Создание новой книги, обращение к открытой книге и ее закрытие. Методы Open, Add и Close.
Открытие существующей книги
Существующая книга открывается из кода VBA Excel с помощью метода Open:
|
Workbooks.Open Filename:=«D:test1.xls» |
или
|
Workbooks.Open («D:test1.xls») |
В кавычках указывается полный путь к открываемому файлу Excel. Если такой файл не существует, произойдет ошибка.
Проверка существования файла
Проверить существование файла можно с помощью функции Dir. Проверка существования книги Excel:
|
If Dir(«D:test1.xls») = «» Then MsgBox «Файл не существует» Else MsgBox «Файл существует» End If |
Или, если файл (книга Excel) существует, можно сразу его открыть:
|
If Dir(«D:test1.xls») = «» Then MsgBox «Файл не существует» Else Workbooks.Open Filename:=«D:test1.xls» End If |
Создание новой книги
Новая рабочая книга Excel создается в VBA с помощью метода Add:
Созданную книгу, если она не будет использоваться как временная, лучше сразу сохранить:
|
Workbooks.Add ActiveWorkbook.SaveAs Filename:=«D:test2.xls» |
В кавычках указывается полный путь сохраняемого файла Excel, включая присваиваемое имя, в примере — это «test2.xls».
Обращение к открытой книге
Обращение к активной книге:
Обращение к книге с выполняемым кодом:
Обращение к книге по имени:
|
Workbooks(«test1.xls») Workbooks(«test2.xls») |
Обратиться по имени можно только к уже открытой книге, а чтобы из кода VBA Excel книгу открыть, необходимо указать полный путь к файлу.
Открытая рабочая книга закрывается из кода VBA Excel с помощью метода Close:
|
Workbooks(«test1.xlsx»).Close |
Если закрываемая книга редактировалась, а внесенные изменения не были сохранены, тогда при ее закрытии Excel отобразит диалоговое окно с вопросом: Вы хотите сохранить изменения в файле test1.xlsx? Чтобы файл был закрыт без сохранения изменений и вывода диалогового окна, можно воспользоваться параметром метода Close — SaveChanges:
|
Workbooks(«test1.xlsx»).Close SaveChanges:=False |
или
|
Workbooks(«test1.xlsx»).Close (False) |
Закрыть книгу Excel из кода VBA с сохранением внесенных изменений можно также с помощью параметра SaveChanges:
|
Workbooks(«test1.xlsx»).Close SaveChanges:=True |
или
|
Workbooks(«test1.xlsx»).Close (True) |
Фразы для контекстного поиска: открыть книгу, открытие книги, создать книгу, создание книги, закрыть книгу, закрытие книги, открыть файл Excel, открытие файла Excel, существование книги, обратиться к открытой книге.



