powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Не отрабатывает код без Application.Quit
11 сообщений из 11, страница 1 из 1
Не отрабатывает код без Application.Quit
    #39922964
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если где-то было, прошу ткнуть носом :)
На открытии книги висит показ формы
Код: vbnet
1.
2.
3.
Public Sub  Workbook_Open()
        frm.Show
end sub


А на закрытии формы
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Public Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then
        Application.ScreenUpdating = False: Application.EnableEvents = False
        ActiveWorkbook.Saved = True
        Application.Quit
    End If    
End Sub


И при повторном открытии книги форма отображается.
Однако могут быть и другие открытые файлы которые нежелательно закрывать - меняю Application.Quit на Application.ActiveWorkbook.Close
Но теперь при повторном открытии форма не показывается... Какие действия предпринять?
...
Рейтинг: 0 / 0
Не отрабатывает код без Application.Quit
    #39922971
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КД
меняю Application.Quit на Application.ActiveWorkbook.Close

Это явная ошибка. Неизвестно, какая книга в этот момент текущая. Следует использовать ThisWorkbook, а заодно явно указывать SaveChanges.

PS. Вылечит ли это именно описанную проблему - фиг знает.
...
Рейтинг: 0 / 0
Не отрабатывает код без Application.Quit
    #39922993
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо!
Жаль, но это не помогло :(
...
Рейтинг: 0 / 0
Не отрабатывает код без Application.Quit
    #39923003
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КД
теперь при повторном открытии форма не показывается
Что, наверное, логично, т.к.:
КД
Application.EnableEvents = False

Т.е. Вы сами перед закрытием отключаете отслеживание событий, в том числе и Workbook_Open. Понятно, что при закрытии всего приложения это свойство восстанавливается, а при закрытии одной лишь книги - нет.
Перепишите код так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Public Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then
        Application.ScreenUpdating = False: Application.EnableEvents = False
        ActiveWorkbook.Saved = True
        ActiveWorkbook.Close False 'или True, если надо сохранить, т.к. .Saved = True ничего не сохраняет
        Application.ScreenUpdating = True: Application.EnableEvents = True
    End If    
End Sub
...
Рейтинг: 0 / 0
Не отрабатывает код без Application.Quit
    #39923182
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist, спасибо!
Только все равно почему-то не отрабатывает как надо. При закрытии формы через эту процедуру
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Public Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then
        Application.ScreenUpdating = False: Application.EnableEvents = False
        ActiveWorkbook.Saved = True
        ActiveWorkbook.Close False 'или True, если надо сохранить, т.к. .Saved = True ничего не сохраняет
        Application.ScreenUpdating = True: Application.EnableEvents = True
    End If    
End Sub


книга закрывается, но в строке формул остается значение ячейки которая была выделена. И при повторном открытии книги форма не показывается. А в окне проекта VBA 2 экземпляра этой книги! При попытке обращения к объекту формы в одном из них выходит ошибка 'Out of memory'.
Книга закрывается, но из памяти не выгружается, что ли?
...
Рейтинг: 0 / 0
Не отрабатывает код без Application.Quit
    #39923188
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КД
в строке формул остается значение ячейки которая была выделена

это уже другой вопрос и больше похоже на глюки. Возможно, это следствие как раз того факта, что книга из памяти не выгружается. И здесь сложно сказать что-то наверняка - нужен файл со всеми кодами. Явно где-то Вы не вычищаете объекты или после закрытия формы обращение к ней все-таки идет.
Кстати, такие глюки могут наблюдаться при использовании объекта RefEdit - он глючный. Не мешало бы зайти в Tools-References и убедиться, что там нет галочки напротив элемента RefEdit. Если есть - снять, скомпилировать проект(Debug -Compile VBAProject), сохранить книгу.
Ну и для пущей убедительности вообще удалить этот элемент со всех форм в проекте и попробовать без них. Чтобы идентифицировать проблему, так сказать.
...
Рейтинг: 0 / 0
Не отрабатывает код без Application.Quit
    #39923198
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RefEdit в References не обнаружен. Прикладываю заархивированный файл. Пароль для входа '111'
...
Рейтинг: 0 / 0
Не отрабатывает код без Application.Quit
    #39923228
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КД,

жуть. Ну вот нафига отключать события и обновление экрана в процедуре закрытия формы, если закрываете книгу с этим кодом ? Выше Вы приводите нам код с ActiveWorkbook, а на деле закрываете ThisWorkbook. Это как бы проблема. Если не хотите выполнять процедуру Workbook_BeforeClose при закрытии формы(если пароль решили не вводить), то делайте флаг, который будет показывать - надо ли выполнять процедуру. Ибо после закрытия книги с кодом дальше код уже не выполняется или глючит. Т.е. вот эта часть:
Код: vbnet
1.
Application.ScreenUpdating = True: Application.EnableEvents = True


уже не выполнится, т.к. книга с этим кодом закрыта .
В общем модуле объявляете переменную:
Код: vbnet
1.
Public IsNonEvents As Boolean


в форме прописываете:
Код: vbnet
1.
2.
3.
4.
5.
6.
Public Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then
        IsNonEvents = True
        ThisWorkbook.Close True
    End If
End Sub


а в модуле ЭтаКнига соответственно:
Код: vbnet
1.
2.
3.
Public Sub Workbook_BeforeClose(Cancel As Boolean)
If IsNonEvents Then Exit Sub
....
...
Рейтинг: 0 / 0
Не отрабатывает код без Application.Quit
    #39923236
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist, огромное спасибо!
Все заработало. Вы уж простите меня, я же совсем не программист и культуре программирования не учился и учить меня некому. Вот, на коленке иногда ваяю что-то урывками, да слушаю советы на форуме. Вот и все мои "университеты". Соответственно, системных знаний нет.
...
Рейтинг: 0 / 0
Не отрабатывает код без Application.Quit
    #39923241
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КД, вы хотя бы знаете о том, что существует культура программирования, уже отлично! )
...
Рейтинг: 0 / 0
Не отрабатывает код без Application.Quit
    #39923295
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, я стараюсь где могу... префиксы, объявления переменных и т.д. но этого явно недостаточно.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Не отрабатывает код без Application.Quit
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]