Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
17.04.2024, 01:27:53

Войти
Добавляйтесь в нашу группу ВКонтакте - будьте в курсе всех новых событий сайта, узнавайте первым обо всех акциях и новых статьях!
33 240 Сообщений в 5 456 Тем от 6 756 Пользователей
Последний пользователь: Expert2024
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Куда лучше вставить в код "ActiveWorkbook.Save"?
Страниц: 1 [2]  Все   Вниз
Печать
Автор Тема: Куда лучше вставить в код "ActiveWorkbook.Save"?  (Прочитано 8399 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 830



Просмотр профиля WWW
« Ответ #15 : 07.05.2020, 11:02:35 »

Скорее всего форма просто не успевает выгрузится из памяти, а Вы уже пытаетесь закрыть весь Excel. Надо менять стратегию.
На событие UserForm_QueryClose повесьте что-то вроде:
Код: (vb)
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Application.OnTime Now, "CloseWb"
End Sub

а в стандартный модуль запишите уже закрытие книги(кстати, прямо здесь можно указать сохранять или нет)
Код: (vb)
Sub CloseWb()
    ThisWorkbook.Close True 'true если надо сохранить
End Sub
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Andrew_Ko
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 48


Просмотр профиля
« Ответ #16 : 07.05.2020, 12:48:37 »

Но вот boa как-то смог без таймера обойтись - см. его приложенный файл чуть выше. Я пока так и не понял в чём фокус - там дважды используется Quit ... В замешательстве
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 830



Просмотр профиля WWW
« Ответ #17 : 07.05.2020, 13:08:33 »

там дважды используется Quit
Не самый лучший способ. Есть шанс, что и второй Quit не решит проблемы.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Andrew_Ko
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 48


Просмотр профиля
« Ответ #18 : 07.05.2020, 13:54:26 »

тогда третий Quit окончательно решит проблему! Веселый
и я так и не понял: второй Quit у него - что-то типа "контрольного выстрела"?
----------------------------
кстати, а у формы нет, случаем, какого-то св-ва, типа: "я закрылась/выгрузилась" или это только через АПИ можно получить?
« Последнее редактирование: 07.05.2020, 13:59:01 от Andrew_Ko » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 830



Просмотр профиля WWW
« Ответ #19 : 07.05.2020, 14:32:40 »

у формы нет, случаем, какого-то св-ва, типа: "я закрылась/выгрузилась"
нет, к сожалению. Но Application.OnTime как раз решает проблему - если присмотреться, то таймера как такового нет, т.к. вызываем без задержки. Но особенность метода в том, что он заставляет ожидать полного отклика от приложения Excel после завершения всех внутренних процессов и только после этого будет вызвана заданная процедура. Это так же относится к ожиданию выгрузки формы.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
boa
Старожил
****

Репутация: +22/-0
Офлайн Офлайн

Сообщений: 252


Доброта спасет мир...


Просмотр профиля WWW
« Ответ #20 : 07.05.2020, 18:17:01 »

В модуле книги был код в вашем примере, я только добавил в модуль формы.
Но как нельзя дважды вступить в одну реку, так нельзя и из приложения выйти дважды, хоть 10-ть квитов напишите...
Записан

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

boa
Старожил
****

Репутация: +22/-0
Офлайн Офлайн

Сообщений: 252


Доброта спасет мир...


Просмотр профиля WWW
« Ответ #21 : 08.05.2020, 21:29:35 »

Дмитрий,
параллельный вопрос,
С запуском макроса после окончания выполняемой процедуры ontime действительно прекрасно справляется,
а вот
он заставляет ожидать полного отклика от приложения Excel после завершения всех внутренних процессов
а doevents данную проблему не решает?
Записан

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

Andrew_Ko
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 48


Просмотр профиля
« Ответ #22 : 10.05.2020, 14:03:20 »

А у меня OnTime в тестовом файле работает прекрасно, а в реальном опять вылезает вопрос о сохранении изменений Плачущий , там форма намно-о-ого сложнее.
Но, зато, прекрасно отрабатывает вариант boa! Вот и пойми этих женщин( я про форму)!
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 830



Просмотр профиля WWW
« Ответ #23 : 10.05.2020, 15:38:47 »

а doevents данную проблему не решает?
Нет, DoEvents лишь передает управление накопившимся процессам, но ничего сам не ждет.
OnTime в тестовом файле работает прекрасно, а в реальном опять вылезает вопрос о сохранении изменений
значит где-то проблема в кодах, это уже факт. Надо все кропотливо в режиме отладки трассировать.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Andrew_Ko
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 48


Просмотр профиля
« Ответ #24 : 10.05.2020, 17:22:52 »

значит где-то проблема в кодах
где хоть искать то? Никаких явных Set без Nothing там явно нет...
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 830



Просмотр профиля WWW
« Ответ #25 : 11.05.2020, 11:00:03 »

явных Set без Nothing там явно нет
а не обязательно они должны быть. Где искать - сложно сказать. Надо в режиме отладки трассировать все что происходит от момента нажатия кнопки закрытия. И там уже смотреть все подозрительное и все, что может подобное поведение вызвать.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Страниц: 1 [2]  Все   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru