Страницы: 1
RSS
Выполнение макроса при закрытии книги после сообщения.
 
Здравствуйте.
Возможно-ли выполнить макрос в событии
Код
 Private Sub Workbook_BeforeClose(Cancel As Boolean)

после выбора команды в системном сообщении о сохранении или не сохранения данных при закрытии книги.
 
Данный макрос выполняется перед закрытием. Если вы хотите контролировать сохранить или нет, то можете это указать в этом макросе.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, Здравствуйте.

Причина в том что при закрытия Книги1 выполняется событие закрытия книги, при котором открывается Книги2

Код
 Private Sub Workbook_BeforeClose(Cancel As Boolean) 'Книга1
 Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & "2.xlsm") ‘открытие Книги2
 End Sub

Книга2 становится активной, но системное сообщение о сохранение или не сохранения в измененной Книги1 не выходит, Книга1 просто остается открытой и неактивной.
Подскажите в чем причина, как это исправить?

Изменено: Сергей13 - 01.06.2018 19:25:45
 
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & "2.xlsm")
ThisWorkbook.Activate
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Sanja, системное сообщение о сохранении или нет выходит, но в активном окне Книги2 и для Книги2, но не для Книги1.
Изменено: Сергей13 - 01.06.2018 20:33:45
 
У меня всё работает
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'Книга1
Workbooks.Open (ThisWorkbook.Path & "\" & "2.xlsm") 'открытие Книги2
End Sub
Выходит сообщение о сохранении, активна книга 1, После закрытия книги активируется книга 2.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, При таком варианте когда закрываешь измененную Книгу1 открывается Книга2 и становится активной, но сама по себе Книга1 не закрывается не выводится системное сообщение для Книги1, она становится просто не активной, хотя действие на закрытие произведено. Почему так?
Изменено: Сергей13 - 02.06.2018 11:59:07
 
Непонятно чего вы там делаете, но у меня всё происходит так как должно быть. Может у вас в открываемой книге какие макросы напичканы. У нас всё правильно работает, чего вы хотите непонятно.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, ну в принципе я описал последовательность как происходит, добавить как бы нечего, файлы ничем не напичканы, просто тестовая проба по предлагаемому варианту. Посмотрите сами.
https://yadi.sk/d/GZl9EkCm3WszdB
 
В выложенном примере отсутствует рекомендация из #4 (строка 3).
Владимир
 
sokol92, С третьей строкой при  закрытии активной Книги1 закрывается и открытая но не активная Книга2
Изменено: Сергей13 - 02.06.2018 14:09:50
 
Это не так. Проверьте еще раз (с "третьей строкой"). Открываете книгу "1" (а книга "2" должна быть закрыта). Закрываете книгу "1". При этом:
  • открывается книга "2"
  • если Вы изменили книгу "1", то будет задан вопрос о сохранении изменений книги "1"
  • закрывается книга "1"

Если не получается, перевыложите примеры с "третьей строкой". Заодно сообщите версию Windows и Excel.
Владимир
 
sokol92, Все как Вы описали но на третьем пункте закрываются обе книги.
Версии: win10, excel2007
Пример:
https://yadi.sk/d/lDYze7yR3WtNGq
 
У меня всё как и положено.
w7, 2010
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, Не знаю почему, но у меня не хочет, посмотрим что скажет Владимир.
 
Проверил на нескольких конфигурациях - проблем нет. Конфигурации Win10+Excel2007 у нас нет. На всякий случай, перед закрытием книги "1" наберите Alt+F11. Должен быть только проект "1.xlsm" и ничего, кроме него. Так?
Владимир
 
sokol92,  Да проект один Книги1.
Далее после действия закрытие, вместе с появлением системного сообщения Книги1 видно по иконки на панели что открывается Книга2 (она не активна) но после выбора любой команды сохранить или нет и последующего закрытия Книги1, закрывается и Книга2.
 
Т.е. у вас после макроса закрываются обе книги и остаётся пустое приложение?
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, Ну да, Книга1 закрывается по причине что она должна закрыться, а Книга2 просто закрывается.
 
Alemox, Понял о чем Вы, с приложением все работает, но я не имел ввиду приложение, я имел ввиду полное закрытие, приложение не нужно чтобы оставалось.
 
Попробуйте закрывать книгу не на самый главный крестик, а на крестик закрытия только книги.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, Да так работает, но необходимо чтобы через основное закрытие, в противном случае при таком варианте возможны различные конфликты между книгами.
 
Тогда напишите следующий код вместо вашего
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'Книга1
    Workbooks.Open (ThisWorkbook.Path & "\" & "2.xlsm") 'открытие Книги2
    ThisWorkbook.Close
End Sub
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, Работает, не знаю будут ли конфликт когда будут коды но сейчас работает так как нужно.
Мне надо было изначально написать о каком закрытие идет речь, не придал этому значение, потому как данным крестом мало кто из обывателей пользуется, в основном закрывают полностью.
Благодарю за помощь, большое спасибо!
 
Ребята извиняюсь за назойливость, но потерялся в локальном пути.
В тестовом варианте файлы находились в одной папке, но когда я их раскидал, то
не знаю как его правильно прописать, чтобы было понятно наглядно директория будет
выглядеть таки образом:

https://yadi.sk/i/3k0vis_c3Wu4Sn

Как прописать в выше предлагаемом коде в файлах A,B,С и т.д локальный путь к основному файлу 1 (основной файл и основная папка неизменны, но вся директория может использоваться на разных компьютерах)?  
Изменено: Сергей13 - 02.06.2018 19:06:34
 
Для того чтобы получить адрес папки на уровень выше можно воспользоваться следующим методом
Код
a=CreateObject("Scripting.FileSystemObject").GetFolder(ThisWorkbook.Path).ParentFolder
По вашей картинке это для файла А, который в ПАПКА1, будет папка с названием ПАПКА.
То-бишь
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Workbooks.Open (CreateObject("Scripting.FileSystemObject").GetFolder(ThisWorkbook.Path).ParentFolder & "\" & "1.xlsm")
    ThisWorkbook.Close
End Sub
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, Благодарствую!
Страницы: 1
Наверх