Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / При открытии - убрать окно приложения, а после закрытия - убить висящий фоновый процесс. / 13 сообщений из 13, страница 1 из 1
05.05.2020, 16:54
    #39954356
АндрейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При открытии - убрать окно приложения, а после закрытия - убить висящий фоновый процесс.
Открытие , модуль книги:
Код: vbnet
1.
2.
3.
4.
Private Sub Workbook_Activate()
Application.Visible = False 'Visible=True предусмотрел! :)
frmCheck.Show
End Sub

но окно Excel всё-равно на секунду возникает на заднем плане. Как его совсем не показывать?

Закрытие , модуль формы:
Код: vbnet
1.
2.
3.
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
   With Application: .ActiveWorkbook.Close: .Quit:  End With
End Sub


модуль книги:
Код: vbnet
1.
2.
3.
4.
5.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    With Application: .EnableEvents = False: .DisplayAlerts = False
    If Not Me.Saved Then Me.Save
    .EnableEvents = True: .DisplayAlerts = True:  End With
End Sub


Но!!! Если в форме что-то менялось, то вопрос о своём сохранении файл всё-равно задаёт и самое неприятное, что остаётся висеть фоновый процесс EXEL.EXE...
...
Рейтинг: 0 / 0
05.05.2020, 23:41
    #39954443
АндрейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При открытии - убрать окно приложения, а после закрытия - убить висящий фоновый процесс.
Совсем непонятно: откуда висящий процесс берётся, разве вот этим:
Код: vbnet
1.
 Application.Quit

я его безусловно не убиваю?
...
Рейтинг: 0 / 0
05.05.2020, 23:53
    #39954444
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При открытии - убрать окно приложения, а после закрытия - убить висящий фоновый процесс.
АндрейК
Совсем непонятно: откуда висящий процесс берётся, разве вот этим:
Код: vbnet
1.
 Application.Quit


я его безусловно не убиваю?
Из твоего первого сообщения не очень понятно, процесс остается висеть в фоне, когда ты изменяешь форму или в любом случае?

Попробуй повесить Quit на UserForm_Terminate, а не на UserForm_QueryClose
...
Рейтинг: 0 / 0
06.05.2020, 00:33
    #39954449
АндрейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При открытии - убрать окно приложения, а после закрытия - убить висящий фоновый процесс.
С висящим процессом разобрался - пошёл по шагам после нажатия "крестика" на форме и увидел, что после строки
Код: vbnet
1.
.ActiveWorkbook.Close

происходит вызов процедуры
Код: vbnet
1.
 Private Sub Workbook_BeforeClose

в книге, а из неё, в свою очередь, возврат в процедуру формы на строку
Код: vbnet
1.
.Quit

не происходит ! Перенёс Quit в модуль книги - процесс пропал. Сейчас в книге так
Код: vbnet
1.
2.
3.
4.
5.
6.
:Private Sub Workbook_BeforeClose(Cancel As Boolean)
    With Application: .EnableEvents = False: .DisplayAlerts = False
    If Not Me.Saved Then Me.Save
    .Quit
    .EnableEvents = True: .DisplayAlerts = True:  End With
End Sub

Но проблема с вопросом о сохранении осталась: если в форме были изменения(а форма "сидит" на листе), то на строке
Код: vbnet
1.
.Quit

вылезает это сообщение, хотя двумя строками выше я св-во DisplayAlerts устанавливаю в False и сообщения должны блокироваться.
...
Рейтинг: 0 / 0
06.05.2020, 00:45
    #39954450
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При открытии - убрать окно приложения, а после закрытия - убить висящий фоновый процесс.
Попробуй сделать Me.Save безусловным
...
Рейтинг: 0 / 0
06.05.2020, 15:58
    #39954664
АндрейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При открытии - убрать окно приложения, а после закрытия - убить висящий фоновый процесс.
Shocker.Pro, пробовал, ничего не поменялось...
Тут вот какое дело: поставил точку останова на строку
Код: vbnet
1.
 .Quit

и вызвал окно отладки, где ввёл
Код: vbnet
1.
 ? Application.DisplayAlerts

... с одного раза догадаешься, что я получил в ответ? True!!! , мать его!
...
Рейтинг: 0 / 0
06.05.2020, 17:21
    #39954713
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При открытии - убрать окно приложения, а после закрытия - убить висящий фоновый процесс.
а ты поставь точку останова и введи ?Me.Name
есть у меня одно подозрение
...
Рейтинг: 0 / 0
06.05.2020, 17:47
    #39954729
АндрейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При открытии - убрать окно приложения, а после закрытия - убить висящий фоновый процесс.
Как и ожидалось: "form — копия.xlsm", т.е. имя открытого файла
...
Рейтинг: 0 / 0
06.05.2020, 18:57
    #39954772
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При открытии - убрать окно приложения, а после закрытия - убить висящий фоновый процесс.
Было бы идеально, если бы ты сделал тестовый пример, то есть файл без всего лишнего, только с тем, что воспроизводит проблему, я б тогда сам потыкался
...
Рейтинг: 0 / 0
06.05.2020, 20:29
    #39954806
АндрейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При открытии - убрать окно приложения, а после закрытия - убить висящий фоновый процесс.
Shocker.Pro, выложил
...
Рейтинг: 0 / 0
06.05.2020, 21:02
    #39954814
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При открытии - убрать окно приложения, а после закрытия - убить висящий фоновый процесс.
Судя по всему, сохранение книги происходит асинхронно. А так как ты сразу закрываешь приложение, оно не успевает дойти до конца.

Возможный выход
запустить Save
установить Saved=True
запустить Quit по таймеру через некоторый промежуток времени или погуглить, как можно выяснить момент окончания сохранения книги

Альтернатива
Запускать Save каждый раз, когда изменяется форма (раз уж ты не предлагаешь пользователю возможность не сохранять изменения)
...
Рейтинг: 0 / 0
06.05.2020, 21:59
    #39954828
АндрейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При открытии - убрать окно приложения, а после закрытия - убить висящий фоновый процесс.
Shocker.Pro, какой таймер?! Там книги-то как таковой нет, 22 кб весь файл - 1 поле и 1 чек на форме!
Это форма, зараза, мутит!!!!!!!!!!
Не открываю форму, но код в книге оставил. Вношу изменения на листе, закрываю файл, и вуаля! - сохраняется без сообщений!!!
Вывод: форму надо как-то "убить" до закрытия книги!
...
Рейтинг: 0 / 0
06.05.2020, 22:01
    #39954829
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При открытии - убрать окно приложения, а после закрытия - убить висящий фоновый процесс.
Какая разница, какой размер.
Ты запускаешь Save и тут же убиваешь приложение.
Save не заканчивается.

Я повесил на форму кнопку и на нее повесил Save - все работает.
Так что просто нужно оттянуть момент Quit
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / При открытии - убрать окно приложения, а после закрытия - убить висящий фоновый процесс. / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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