Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как модернизировать макрос "закрыть все книги" - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как модернизировать макрос "закрыть все книги" (Макросы/Sub)
Как модернизировать макрос "закрыть все книги"
Serge1400 Дата: Четверг, 19.12.2019, 10:38 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 101
Репутация: 0 ±
Замечаний: 0% ±

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

[vba]
Код
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
[/vba]


Сообщение отредактировал Serge1400 - Четверг, 19.12.2019, 10:39
 
Ответить
СообщениеВсе добрый день!
Есть у меня вот макрос, найденный в сети, который зарывает без сохранения все книги кроме активной. Подскжите, плиз, как сделать, чтобы он закрывал без сохранения абсолютно все открытые книги, включая активную?

[vba]
Код
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
[/vba]

Автор - Serge1400
Дата добавления - 19.12.2019 в 10:38
_Boroda_ Дата: Четверг, 19.12.2019, 10:40 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16496
Репутация: 6420 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
После Next перед Sub (между этими строками) добавить строку
[vba]
Код
ActiveWorkbook.Close
[/vba]
Вот так
[vba]
Код
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
ActiveWorkbook.Close
End Sub
[/vba]
Почему не просто снять проверку If-ом в цикле? Потому, что если книга с макросом закроется не последняя, то макрос перестанет работать и не закроет оставшиеся книги


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПосле Next перед Sub (между этими строками) добавить строку
[vba]
Код
ActiveWorkbook.Close
[/vba]
Вот так
[vba]
Код
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
ActiveWorkbook.Close
End Sub
[/vba]
Почему не просто снять проверку If-ом в цикле? Потому, что если книга с макросом закроется не последняя, то макрос перестанет работать и не закроет оставшиеся книги

Автор - _Boroda_
Дата добавления - 19.12.2019 в 10:40
Serge1400 Дата: Четверг, 19.12.2019, 11:46 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 101
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Почему не просто снять проверку If-ом в цикле? Потому, что если книга с макросом закроется не последняя, то макрос перестанет работать и не закроет оставшиеся книги


Вот... Все слова знаю, что значит не понимаю: там if аж два раза есть!Что отпилить надо?
Саш, ты же знаешь, что я на 99,9% читатель с навыками писателя на уровне чукчи:
Чо нашел или подарили, тем и пользуюсь. Но иногда пытаюсь сам поковыряться, но не всегда успешно .


Сообщение отредактировал Serge1400 - Четверг, 19.12.2019, 11:48
 
Ответить
Сообщение
Почему не просто снять проверку If-ом в цикле? Потому, что если книга с макросом закроется не последняя, то макрос перестанет работать и не закроет оставшиеся книги


Вот... Все слова знаю, что значит не понимаю: там if аж два раза есть!Что отпилить надо?
Саш, ты же знаешь, что я на 99,9% читатель с навыками писателя на уровне чукчи:
Чо нашел или подарили, тем и пользуюсь. Но иногда пытаюсь сам поковыряться, но не всегда успешно .

Автор - Serge1400
Дата добавления - 19.12.2019 в 11:46
_Boroda_ Дата: Четверг, 19.12.2019, 11:51 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16496
Репутация: 6420 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Но насколько я помню, ты по-вражески сечешь. Вот и прочитай :D
Первый иф - проверка на видимость книги, второй - на то, что книга не активна. Кстати, я бы написал не ActiveWorkbook, а ThisWorkbook


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНо насколько я помню, ты по-вражески сечешь. Вот и прочитай :D
Первый иф - проверка на видимость книги, второй - на то, что книга не активна. Кстати, я бы написал не ActiveWorkbook, а ThisWorkbook

Автор - _Boroda_
Дата добавления - 19.12.2019 в 11:51
Serge1400 Дата: Четверг, 19.12.2019, 12:11 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 101
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Первый иф - проверка на видимость книги, второй - на то, что книга не активна

Вот это то я таки худо-бедно уразумел. С остальным беда.
Мне знаний в VBA терминологии не хватает: что значит снять проверку в цикле? Это все что на ИФы завязано затереть?
P.S. Испытал - затер все ифы - не, не работает.
И еще: сделал как предложено: работает, но стал спрашивать о сохранении активной книги. Как сделать все зарывалось без вопросов?
[vba]
Код
Sub CloseAllWorkbooks4()
' закрываем все книги, кроме текущей (активной), БЕЗ СОХРАНЕНИЯ изменений
Dim wb As Workbook: Application.ScreenUpdating = False
For Each wb In Workbooks ' перебираем все открытые книги
If wb.Windows(1).Visible Then If Not wb Is ThisWorkbook Then wb.Close False
Next wb
ActiveWorkbook.Close
End Sub
[/vba]


Сообщение отредактировал Serge1400 - Четверг, 19.12.2019, 13:47
 
Ответить
Сообщение
Первый иф - проверка на видимость книги, второй - на то, что книга не активна

Вот это то я таки худо-бедно уразумел. С остальным беда.
Мне знаний в VBA терминологии не хватает: что значит снять проверку в цикле? Это все что на ИФы завязано затереть?
P.S. Испытал - затер все ифы - не, не работает.
И еще: сделал как предложено: работает, но стал спрашивать о сохранении активной книги. Как сделать все зарывалось без вопросов?
[vba]
Код
Sub CloseAllWorkbooks4()
' закрываем все книги, кроме текущей (активной), БЕЗ СОХРАНЕНИЯ изменений
Dim wb As Workbook: Application.ScreenUpdating = False
For Each wb In Workbooks ' перебираем все открытые книги
If wb.Windows(1).Visible Then If Not wb Is ThisWorkbook Then wb.Close False
Next wb
ActiveWorkbook.Close
End Sub
[/vba]

Автор - Serge1400
Дата добавления - 19.12.2019 в 12:11
Апострофф Дата: Четверг, 19.12.2019, 14:31 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 416
Репутация: 117 ±
Замечаний: 0% ±

Excel 1997
Как сделать все зарывалось без вопросов?

Все ли теперь?
[vba]
Код
Sub CloseAll()
For Each wb In Workbooks ' перебираем все открытые книги
  wb.Saved = True
Next
Application.Quit
End Sub
[/vba]
 
Ответить
Сообщение
Как сделать все зарывалось без вопросов?

Все ли теперь?
[vba]
Код
Sub CloseAll()
For Each wb In Workbooks ' перебираем все открытые книги
  wb.Saved = True
Next
Application.Quit
End Sub
[/vba]

Автор - Апострофф
Дата добавления - 19.12.2019 в 14:31
Serge1400 Дата: Четверг, 19.12.2019, 14:49 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 101
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Цитата Апострофф, 19.12.2019 в 14:31, в сообщении № 6 ()
Все ли теперь?

Спасибо за помощь!
Но как надо не работает.
Если запускаю из книги, где макрос записан ( я его в ленту добавил, чтобы всегда под рукой был), предлагает каждый файл сохранить.
Если из другой открытой, то все равно предлагает сохранить, но правда только книгу в которой записан.
 
Ответить
Сообщение
Цитата Апострофф, 19.12.2019 в 14:31, в сообщении № 6 ()
Все ли теперь?

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

Автор - Serge1400
Дата добавления - 19.12.2019 в 14:49
_Boroda_ Дата: Четверг, 19.12.2019, 14:51 | Сообщение № 8
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16496
Репутация: 6420 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
[vba]
Код
ActiveWorkbook.Close False
[/vba]
А Ифы затирать нельзя. Я ж писал
если книга с макросом закроется не последняя, то макрос перестанет работать и не закроет оставшиеся книги

Макрос закрывает книги по порядку. Не факт, что последней будет закрываться именно та, откуда был этот макрос запущен.
Допустим, книг 3, ААА, ВВВ и ССС. Макрос в ААА. Запускаем его, закрывается книга ВВВ, потом ААА и макрос прекращает работу. Книга ССС остается открытой.
А вот с закрытием Апликейшена (это текущая сессия Excel), как предложил Владимир, уже без разницы, как файлы расположены. Ставим им "не сохранять" и закрываем все сразу
https://u.to/x7AGFw

Добавлено
Владимир - это Апострофф


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение[vba]
Код
ActiveWorkbook.Close False
[/vba]
А Ифы затирать нельзя. Я ж писал
если книга с макросом закроется не последняя, то макрос перестанет работать и не закроет оставшиеся книги

Макрос закрывает книги по порядку. Не факт, что последней будет закрываться именно та, откуда был этот макрос запущен.
Допустим, книг 3, ААА, ВВВ и ССС. Макрос в ААА. Запускаем его, закрывается книга ВВВ, потом ААА и макрос прекращает работу. Книга ССС остается открытой.
А вот с закрытием Апликейшена (это текущая сессия Excel), как предложил Владимир, уже без разницы, как файлы расположены. Ставим им "не сохранять" и закрываем все сразу
https://u.to/x7AGFw

Добавлено
Владимир - это Апострофф

Автор - _Boroda_
Дата добавления - 19.12.2019 в 14:51
Апострофф Дата: Четверг, 19.12.2019, 15:05 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 416
Репутация: 117 ±
Замечаний: 0% ±

Excel 1997
[offtop]
как предложил Владимир

Владимир - это кто?
Может быть Апострофф?[/offtop]
 
Ответить
Сообщение[offtop]
как предложил Владимир

Владимир - это кто?
Может быть Апострофф?[/offtop]

Автор - Апострофф
Дата добавления - 19.12.2019 в 15:05
_Boroda_ Дата: Четверг, 19.12.2019, 15:13 | Сообщение № 10
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16496
Репутация: 6420 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Не знаю, как в профиле написано, так и Владимир
К сообщению приложен файл: 5526279.gif(20.2 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНе знаю, как в профиле написано, так и Владимир

Автор - _Boroda_
Дата добавления - 19.12.2019 в 15:13
Апострофф Дата: Четверг, 19.12.2019, 15:19 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 416
Репутация: 117 ±
Замечаний: 0% ±

Excel 1997
[offtop]Владимир`ов много во вселенной, Апострофф тут один?[/offtop]
 
Ответить
Сообщение[offtop]Владимир`ов много во вселенной, Апострофф тут один?[/offtop]

Автор - Апострофф
Дата добавления - 19.12.2019 в 15:19
_Boroda_ Дата: Четверг, 19.12.2019, 15:22 | Сообщение № 12
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16496
Репутация: 6420 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Согласен. Мне кажется, что Владимир как-то вежлевее. Но без проблем, подправлю свой пост , мне не сложно


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеСогласен. Мне кажется, что Владимир как-то вежлевее. Но без проблем, подправлю свой пост , мне не сложно

Автор - _Boroda_
Дата добавления - 19.12.2019 в 15:22
Апострофф Дата: Четверг, 19.12.2019, 15:38 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 416
Репутация: 117 ±
Замечаний: 0% ±

Excel 1997
[vba]
Код
wb.Saved = True
[/vba]
Ставим им "не сохранять"

Ставим им "Сохранено" - так правильнее по контексту.


Сообщение отредактировал Апострофф - Четверг, 19.12.2019, 15:45
 
Ответить
Сообщение[vba]
Код
wb.Saved = True
[/vba]
Ставим им "не сохранять"

Ставим им "Сохранено" - так правильнее по контексту.

Автор - Апострофф
Дата добавления - 19.12.2019 в 15:38
Апострофф Дата: Четверг, 19.12.2019, 18:53 | Сообщение № 14
Группа: Проверенные
Ранг: Обитатель
Сообщений: 416
Репутация: 117 ±
Замечаний: 0% ±

Excel 1997
Владимир - это Апострофф

Категорично слишком, или только мне так кажется?
Апострофф - это Владимир, надеюсь что это здесь навсегда.
 
Ответить
Сообщение
Владимир - это Апострофф

Категорично слишком, или только мне так кажется?
Апострофф - это Владимир, надеюсь что это здесь навсегда.

Автор - Апострофф
Дата добавления - 19.12.2019 в 18:53
micholap_denis Дата: Суббота, 18.09.2021, 21:07 | Сообщение № 15
Группа: Проверенные
Ранг: Обитатель
Сообщений: 339
Репутация: 0 ±
Замечаний: 60% ±

Excel 2013
а подскажите как подправить макрос чтоб закрывались все книги кроме книги с определенным именем, например 111
[vba]
Код
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
[/vba]


Сообщение отредактировал micholap_denis - Суббота, 18.09.2021, 21:08
 
Ответить
Сообщениеа подскажите как подправить макрос чтоб закрывались все книги кроме книги с определенным именем, например 111
[vba]
Код
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
[/vba]

Автор - micholap_denis
Дата добавления - 18.09.2021 в 21:07
micholap_denis Дата: Пятница, 24.09.2021, 21:38 | Сообщение № 16
Группа: Проверенные
Ранг: Обитатель
Сообщений: 339
Репутация: 0 ±
Замечаний: 60% ±

Excel 2013
никому не интересно, или сложно в выполнении?
 
Ответить
Сообщениеникому не интересно, или сложно в выполнении?

Автор - micholap_denis
Дата добавления - 24.09.2021 в 21:38
Pelena Дата: Пятница, 24.09.2021, 21:48 | Сообщение № 17
Группа: Админы
Ранг: Местный житель
Сообщений: 18606
Репутация: 4219 ±
Замечаний: ±

Excel 2016 & Mac Excel
примерно так
[vba]
Код
For Each wb In Workbooks ' перебираем все открытые книги
If wb.Name<>"111.xlsx" Then wb.Close False
Next wb
[/vba]


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщениепримерно так
[vba]
Код
For Each wb In Workbooks ' перебираем все открытые книги
If wb.Name<>"111.xlsx" Then wb.Close False
Next wb
[/vba]

Автор - Pelena
Дата добавления - 24.09.2021 в 21:48
micholap_denis Дата: Суббота, 25.09.2021, 21:38 | Сообщение № 18
Группа: Проверенные
Ранг: Обитатель
Сообщений: 339
Репутация: 0 ±
Замечаний: 60% ±

Excel 2013
[sup]Pelena, здравствуйте. так и думал что только вы откликнитесь....
так пишет ошибку в синтаксисе в строке
[vba]
Код
wb.Name<>"111.xlsx" Then wb.Close False
[/vba]
если
[vba]
Код
If wb.Name<>"111.xlsx" Then wb.Close Falsе
[/vba]
закрывает книги кроме 111


Сообщение отредактировал micholap_denis - Суббота, 25.09.2021, 21:44
 
Ответить
Сообщение[sup]Pelena, здравствуйте. так и думал что только вы откликнитесь....
так пишет ошибку в синтаксисе в строке
[vba]
Код
wb.Name<>"111.xlsx" Then wb.Close False
[/vba]
если
[vba]
Код
If wb.Name<>"111.xlsx" Then wb.Close Falsе
[/vba]
закрывает книги кроме 111

Автор - micholap_denis
Дата добавления - 25.09.2021 в 21:38
Pelena Дата: Суббота, 25.09.2021, 21:59 | Сообщение № 19
Группа: Админы
Ранг: Местный житель
Сообщений: 18606
Репутация: 4219 ±
Замечаний: ±

Excel 2016 & Mac Excel
Конечно If, нечаянно удалила лишнее. Хотя условие [vba]
Код
If wb.Windows(1).Visible
[/vba] тоже может быть полезным, если пользуетесь личной книгой макросов


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеКонечно If, нечаянно удалила лишнее. Хотя условие [vba]
Код
If wb.Windows(1).Visible
[/vba] тоже может быть полезным, если пользуетесь личной книгой макросов

Автор - Pelena
Дата добавления - 25.09.2021 в 21:59
micholap_denis Дата: Суббота, 25.09.2021, 22:19 | Сообщение № 20
Группа: Проверенные
Ранг: Обитатель
Сообщений: 339
Репутация: 0 ±
Замечаний: 60% ±

Excel 2013
Pelena,
неправильно написал....если с if
то закрывает именно файл 111
 
Ответить
СообщениеPelena,
неправильно написал....если с if
то закрывает именно файл 111

Автор - micholap_denis
Дата добавления - 25.09.2021 в 22:19
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как модернизировать макрос "закрыть все книги" (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2022 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!