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

Вход

Регистрация

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

 

= Мир MS Excel/Application.Quit - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Application.Quit (Макросы/Sub)
Application.Quit
pentium1024 Дата: Четверг, 06.01.2022, 14:23 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 0 ±
Замечаний: 20% ±

2016
Здравствуйте!
[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)

If Cells(1, 1) = "" And Workbooks.Count = 1 Then MsgBox "1": ThisWorkbook.Close (False): MsgBox "2": Application.Quit
MsgBox "3"
[/vba]
1. Не могу понять, почему ThisWorkbook.Close не происходит, судя по работающему MsgBox "2", и Application.Quit не происходит, судя по работающему MsgBox "3".
2. Не могу понять, почему MsgBox "1" срабатывает два раза.
При этом полстраницей ниже
[vba]
Код

ThisWorkbook.Save
If Workbooks.Count = 1 Then Application.Quit
End Sub
[/vba]
работает.
Прошу помощи ответами на 1. и 2.
 
Ответить
СообщениеЗдравствуйте!
[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)

If Cells(1, 1) = "" And Workbooks.Count = 1 Then MsgBox "1": ThisWorkbook.Close (False): MsgBox "2": Application.Quit
MsgBox "3"
[/vba]
1. Не могу понять, почему ThisWorkbook.Close не происходит, судя по работающему MsgBox "2", и Application.Quit не происходит, судя по работающему MsgBox "3".
2. Не могу понять, почему MsgBox "1" срабатывает два раза.
При этом полстраницей ниже
[vba]
Код

ThisWorkbook.Save
If Workbooks.Count = 1 Then Application.Quit
End Sub
[/vba]
работает.
Прошу помощи ответами на 1. и 2.

Автор - pentium1024
Дата добавления - 06.01.2022 в 14:23
doober Дата: Четверг, 06.01.2022, 15:26 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте.
1. Не могу понять, почему ThisWorkbook.Close не происходит
А че бы ему происходить, если в самом событии перед закрытием его же и вызываете.
Так должно сработать[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.DisplayAlerts = False
    If Cells(1, 1) = "" And Workbooks.Count = 1 Then MsgBox "1": MsgBox "2": Application.Quit
    MsgBox "3"
End Sub
[/vba]


 
Ответить
СообщениеЗдравствуйте.
1. Не могу понять, почему ThisWorkbook.Close не происходит
А че бы ему происходить, если в самом событии перед закрытием его же и вызываете.
Так должно сработать[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.DisplayAlerts = False
    If Cells(1, 1) = "" And Workbooks.Count = 1 Then MsgBox "1": MsgBox "2": Application.Quit
    MsgBox "3"
End Sub
[/vba]

Автор - doober
Дата добавления - 06.01.2022 в 15:26
pentium1024 Дата: Четверг, 06.01.2022, 21:30 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 0 ±
Замечаний: 20% ±

2016
doober, спасибо.
Перестал второй раз срабатывать MsgBox "1".
Но цель не достигается, Application.Quit по-прежнему не работает.
 
Ответить
Сообщениеdoober, спасибо.
Перестал второй раз срабатывать MsgBox "1".
Но цель не достигается, Application.Quit по-прежнему не работает.

Автор - pentium1024
Дата добавления - 06.01.2022 в 21:30
doober Дата: Четверг, 06.01.2022, 22:39 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Application.Quit по-прежнему не работает.

Все работает https://radikal.ru/video/yuVlatptMNk




Сообщение отредактировал doober - Четверг, 06.01.2022, 22:39
 
Ответить
Сообщение
Application.Quit по-прежнему не работает.

Все работает https://radikal.ru/video/yuVlatptMNk

Автор - doober
Дата добавления - 06.01.2022 в 22:39
pentium1024 Дата: Четверг, 06.01.2022, 22:48 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 0 ±
Замечаний: 20% ±

2016
doober, спасибо.
Если работает, почему срабатывает MsgBox "3"? Разве после Application.Quit не всё, касающееся Экселя, д. закрыться?
 
Ответить
Сообщениеdoober, спасибо.
Если работает, почему срабатывает MsgBox "3"? Разве после Application.Quit не всё, касающееся Экселя, д. закрыться?

Автор - pentium1024
Дата добавления - 06.01.2022 в 22:48
doober Дата: Пятница, 07.01.2022, 09:42 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Вы вызываете Application.Quit находясь в процедуре перед закрытием книги.
Она, как минимум, должна выполнится до конца.Книга еще не закрыта.


 
Ответить
СообщениеВы вызываете Application.Quit находясь в процедуре перед закрытием книги.
Она, как минимум, должна выполнится до конца.Книга еще не закрыта.

Автор - doober
Дата добавления - 07.01.2022 в 09:42
pentium1024 Дата: Пятница, 07.01.2022, 09:44 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 0 ±
Замечаний: 20% ±

2016
К вопросу 2. Почему MsgBox срабатывает два раза.
Если выше объяснено вызовом ThisWorkbook.Close из самого себя, то в коде
[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean, k As Byte)

With Range("E2:E" & lr + 8)

    .ClearContents
End With

ThisWorkbook.Save
If Workbooks.Count = 1 Then MsgBox "Quit " & k: k = k + 1: Application.Quit
End Sub
[/vba]
.ClearContents приводит к тому же, двойному срабатыванию MsgBox "Quit " & k:. Который оба раза показывает 1 как k.
Ничему в моём коде это не мешает, но хочется знать для того, чтобы знать. Поэтому прошу помощи у состоявшихся знатоков.
 
Ответить
СообщениеК вопросу 2. Почему MsgBox срабатывает два раза.
Если выше объяснено вызовом ThisWorkbook.Close из самого себя, то в коде
[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean, k As Byte)

With Range("E2:E" & lr + 8)

    .ClearContents
End With

ThisWorkbook.Save
If Workbooks.Count = 1 Then MsgBox "Quit " & k: k = k + 1: Application.Quit
End Sub
[/vba]
.ClearContents приводит к тому же, двойному срабатыванию MsgBox "Quit " & k:. Который оба раза показывает 1 как k.
Ничему в моём коде это не мешает, но хочется знать для того, чтобы знать. Поэтому прошу помощи у состоявшихся знатоков.

Автор - pentium1024
Дата добавления - 07.01.2022 в 09:44
pentium1024 Дата: Пятница, 07.01.2022, 09:47 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 0 ±
Замечаний: 20% ±

2016
doober, спасибо.
Вопрос 1. прояснён. Если я верно понял, Application.Quit произойдёт только после End Sub, а помещать его можно в любое место кода.


Сообщение отредактировал pentium1024 - Пятница, 07.01.2022, 09:52
 
Ответить
Сообщениеdoober, спасибо.
Вопрос 1. прояснён. Если я верно понял, Application.Quit произойдёт только после End Sub, а помещать его можно в любое место кода.

Автор - pentium1024
Дата добавления - 07.01.2022 в 09:47
doober Дата: Пятница, 07.01.2022, 11:01 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Вы не разобрались.
Выполните этот код, который запишите в обычный модуль.[vba]
Код
Sub Test2()
    MsgBox 1
    Application.DisplayAlerts = False
    Application.Quit
    MsgBox 2
End Sub
[/vba] MsgBox 2 не произойдет.
А код, который находится в событии Sub Workbook_BeforeClose выполнится до конца, потому что книга еще не закрыта.
Простыми словами, после закрытия книги выполнить Application.Quit.




Сообщение отредактировал doober - Пятница, 07.01.2022, 11:02
 
Ответить
СообщениеВы не разобрались.
Выполните этот код, который запишите в обычный модуль.[vba]
Код
Sub Test2()
    MsgBox 1
    Application.DisplayAlerts = False
    Application.Quit
    MsgBox 2
End Sub
[/vba] MsgBox 2 не произойдет.
А код, который находится в событии Sub Workbook_BeforeClose выполнится до конца, потому что книга еще не закрыта.
Простыми словами, после закрытия книги выполнить Application.Quit.

Автор - doober
Дата добавления - 07.01.2022 в 11:01
pentium1024 Дата: Пятница, 07.01.2022, 11:09 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 0 ±
Замечаний: 20% ±

2016
doober, спасибо.
 
Ответить
Сообщениеdoober, спасибо.

Автор - pentium1024
Дата добавления - 07.01.2022 в 11:09
doober Дата: Пятница, 07.01.2022, 11:20 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Обманул, дойдет до MsgBox 2


 
Ответить
СообщениеОбманул, дойдет до MsgBox 2

Автор - doober
Дата добавления - 07.01.2022 в 11:20
pentium1024 Дата: Пятница, 07.01.2022, 15:07 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 0 ±
Замечаний: 20% ±

2016
doober, :-)
А я поленился проверять.
Так что, «Application.Quit произойдёт только после End Sub, а помещать его можно в любое место кода» верно для всех Sub, не только для Sub Workbook_BeforeClose?

P.S. Да, доходит до MsgBox "2". А Application.Quit происходит только после End Sub.


Сообщение отредактировал pentium1024 - Суббота, 08.01.2022, 07:02
 
Ответить
Сообщениеdoober, :-)
А я поленился проверять.
Так что, «Application.Quit произойдёт только после End Sub, а помещать его можно в любое место кода» верно для всех Sub, не только для Sub Workbook_BeforeClose?

P.S. Да, доходит до MsgBox "2". А Application.Quit происходит только после End Sub.

Автор - pentium1024
Дата добавления - 07.01.2022 в 15:07
pentium1024 Дата: Суббота, 08.01.2022, 06:57 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 0 ±
Замечаний: 20% ±

2016
Родился и 3. Если из Private Sub сделать Call Workbook_BeforeClose, то закрытия файла не происходит.
Верно я понимаю, что Workbook_BeforeClose с Call работает как обычная Sub – книгу не закрывает и передаёт очередь по окончании своей работы вызвавшей её Private Sub?
 
Ответить
СообщениеРодился и 3. Если из Private Sub сделать Call Workbook_BeforeClose, то закрытия файла не происходит.
Верно я понимаю, что Workbook_BeforeClose с Call работает как обычная Sub – книгу не закрывает и передаёт очередь по окончании своей работы вызвавшей её Private Sub?

Автор - pentium1024
Дата добавления - 08.01.2022 в 06:57
doober Дата: Воскресенье, 09.01.2022, 00:32 | Сообщение № 14
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Call Workbook_BeforeClose
Не правильным путем идете товарищи.
Забудьте эту бредовую идею.Напишите, что в конечном итоге перед закрытием книги хотите сделать


 
Ответить
Сообщение
Call Workbook_BeforeClose
Не правильным путем идете товарищи.
Забудьте эту бредовую идею.Напишите, что в конечном итоге перед закрытием книги хотите сделать

Автор - doober
Дата добавления - 09.01.2022 в 00:32
pentium1024 Дата: Воскресенье, 09.01.2022, 01:01 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 0 ±
Замечаний: 20% ±

2016
doober, сначала понять, в чём неправильность пути и бредовость идеи.
Потом по событию закрывать книгу, предварительно какие-то данные переписав, какие-то почистив. Т.к. те же переписывания и чистки д. происходить и по кресту, то код нужно поместить в Workbook_BeforeClose.
Сейчас по событию делаю Call Workbook_BeforeClose. Всё, кстати, работает, если туда поместить ThisWorkbook.Close, что, видимо, тоже неправильно и бредово. Случаев «я не знал, что так нельзя, и сделал так, и оно работает» полно не только в программировании.
Наверное, Вы правы в неправильности и бредовости, поэтому по событию нужно ThisWorkbook.Close в Private Sub.


Сообщение отредактировал pentium1024 - Воскресенье, 09.01.2022, 01:16
 
Ответить
Сообщениеdoober, сначала понять, в чём неправильность пути и бредовость идеи.
Потом по событию закрывать книгу, предварительно какие-то данные переписав, какие-то почистив. Т.к. те же переписывания и чистки д. происходить и по кресту, то код нужно поместить в Workbook_BeforeClose.
Сейчас по событию делаю Call Workbook_BeforeClose. Всё, кстати, работает, если туда поместить ThisWorkbook.Close, что, видимо, тоже неправильно и бредово. Случаев «я не знал, что так нельзя, и сделал так, и оно работает» полно не только в программировании.
Наверное, Вы правы в неправильности и бредовости, поэтому по событию нужно ThisWorkbook.Close в Private Sub.

Автор - pentium1024
Дата добавления - 09.01.2022 в 01:01
doober Дата: Воскресенье, 09.01.2022, 09:56 | Сообщение № 16
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = True ' Не даст закрыть книгу.

End Sub
[/vba]
И работайте в этом направлении


 
Ответить
Сообщение[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = True ' Не даст закрыть книгу.

End Sub
[/vba]
И работайте в этом направлении

Автор - doober
Дата добавления - 09.01.2022 в 09:56
nilem Дата: Воскресенье, 09.01.2022, 10:20 | Сообщение № 17
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
а может типа такого:
[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Т.к. те же переписывания и чистки д. происходить и по кресту
If MsgBox("Уже переписали и почистили?", 36) = vbNo Then
    Cancel = True
'    здесь вызываем код для очистки
End If
End Sub
[/vba]
*Сергей уже написал (я поздно увидел)


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Воскресенье, 09.01.2022, 10:21
 
Ответить
Сообщениеа может типа такого:
[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Т.к. те же переписывания и чистки д. происходить и по кресту
If MsgBox("Уже переписали и почистили?", 36) = vbNo Then
    Cancel = True
'    здесь вызываем код для очистки
End If
End Sub
[/vba]
*Сергей уже написал (я поздно увидел)

Автор - nilem
Дата добавления - 09.01.2022 в 10:20
pentium1024 Дата: Воскресенье, 09.01.2022, 10:46 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 0 ±
Замечаний: 20% ±

2016
nilem, благодарю за участие.
Помощь пользователя – не наш способ, оно д. работать само.
В каком направлении работать, куда меня направляете вы с doober'ом, я пока не сообразил. Зачем мне Cancel = True, кому и зачем он не даст закрыть книгу, кот. нужно закрыть, не понятно. Как в анекдоте про сложную лекцию: вопросов нет, всё один большой вопрос.
 
Ответить
Сообщениеnilem, благодарю за участие.
Помощь пользователя – не наш способ, оно д. работать само.
В каком направлении работать, куда меня направляете вы с doober'ом, я пока не сообразил. Зачем мне Cancel = True, кому и зачем он не даст закрыть книгу, кот. нужно закрыть, не понятно. Как в анекдоте про сложную лекцию: вопросов нет, всё один большой вопрос.

Автор - pentium1024
Дата добавления - 09.01.2022 в 10:46
nilem Дата: Воскресенье, 09.01.2022, 11:46 | Сообщение № 19
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Напишите, что в конечном итоге перед закрытием книги хотите сделать


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
Напишите, что в конечном итоге перед закрытием книги хотите сделать

Автор - nilem
Дата добавления - 09.01.2022 в 11:46
doober Дата: Воскресенье, 09.01.2022, 12:35 | Сообщение № 20
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
куда меня направляете вы с doober'ом, я пока не сообразил
:D Куда, доки хоть немного почитать


 
Ответить
Сообщение
куда меня направляете вы с doober'ом, я пока не сообразил
:D Куда, доки хоть немного почитать

Автор - doober
Дата добавления - 09.01.2022 в 12:35
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Application.Quit (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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