Эти макросы помогут вам закрыть все открытые файлы 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
|
|||

Комментарии
Hugo, полностью согласен. Спасибо за замечание.
Просто я не пользуюсь файлами типа Personal.xls, и регулярно забываю проверять книги на видимость окна перед закрытием...
Исправил макросы в статье.
А как же Personal.xls/x/b? Если закрываем ВСЕ книги, тогда всё равно, но если оставляем текущую, то вероятно нужно оставить и все нужные скрытые книги? У меня таких аж 3 в фоне открыты - я без них не могу (не хочу :) )
Я бы добавил ещё условие
If Windows(wb.Name).Visible Then
или
If wb.Windows(1).Visible Then
Отправить комментарий