Sobirjon, Добрый день! рекомендую Вам поставить бейкпойнт и проверить чему у вас равно кол-во книг в момент закрытия. У меня число книг всегда больше 1, поскольку есть книга личных макросов. Ещё мне странным кажется, что код работает нормально при вашей записи, но я бы, всё-таки, сначала закрывал книгу и только потом бы закрывал приложение, а не наоборот.
Sobirjon, Добрый день! рекомендую Вам поставить бейкпойнт и проверить чему у вас равно кол-во книг в момент закрытия. У меня число книг всегда больше 1, поскольку есть книга личных макросов. Ещё мне странным кажется, что код работает нормально при вашей записи, но я бы, всё-таки, сначала закрывал книгу и только потом бы закрывал приложение, а не наоборот.Roman777
Много чего не знаю!!!!
Сообщение отредактировал Roman777 - Понедельник, 09.03.2020, 16:25
Задача выйти полностью из эксель, если нет больше открытых книг. Перед обращением естественно смотрел в отладчике по шагово. Условие выполняется, макрос заходит, только по не понятным мне причинам эксель не выходит :help:
Задача выйти полностью из эксель, если нет больше открытых книг. Перед обращением естественно смотрел в отладчике по шагово. Условие выполняется, макрос заходит, только по не понятным мне причинам эксель не выходит :help:
Private Sub Workbook_BeforeClose(Cancel As Boolean) If trt Then Exit Sub Application.DisplayFullScreen = False ActiveWindow.DisplayHeadings = True Application.DisplayFormulaBar = True trt = True If Workbooks.Count = 1 Then ThisWorkbook.Saved = True Application.Quit ThisWorkbook.Close False Else If Workbooks.Count = 2 Then If Workbooks(1).Name = "PERSONAL.XLSB" Or Workbooks(2).Name = "PERSONAL.XLSB" Then Workbooks("PERSONAL.XLSB").Close False ThisWorkbook.Saved = True Application.Quit trt = False End If Else ThisWorkbook.Close False End If End If End Sub
[/vba]
Доброго дня! у меня работает так:
[vba]
Код
Option Explicit Public trt As Boolean
Private Sub Workbook_BeforeClose(Cancel As Boolean) If trt Then Exit Sub Application.DisplayFullScreen = False ActiveWindow.DisplayHeadings = True Application.DisplayFormulaBar = True trt = True If Workbooks.Count = 1 Then ThisWorkbook.Saved = True Application.Quit ThisWorkbook.Close False Else If Workbooks.Count = 2 Then If Workbooks(1).Name = "PERSONAL.XLSB" Or Workbooks(2).Name = "PERSONAL.XLSB" Then Workbooks("PERSONAL.XLSB").Close False ThisWorkbook.Saved = True Application.Quit trt = False End If Else ThisWorkbook.Close False End If End If End Sub
[/vba]завершает макрос, но приложение остается по прежнему.
Протестировал вот так: [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) With Application .DisplayFullScreen = False .DisplayFormulaBar = True .DisplayAlerts = False End With
' ActiveWorkbook.Close True ' Application.Quit End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Application.DisplayAlerts = False Cancel = True End Sub
Private Sub Workbook_Open() Application.DisplayFullScreen = True End Sub
[/vba] Приложение закрывается и книга не сохранятся (как и планировался) если больше открытых книг нет. Если открыто еще книги, тогда на сообщению которые вылетает с запросом о сохранении книги нажать "сохранить", то запрос занового повторяется пока не нажать "не сохранить". почему-то [vba]
Код
Application.DisplayAlerts = False
[/vba] игнорируется
K-SerJC [vba]
Код
If trt Then Exit Sub
[/vba]завершает макрос, но приложение остается по прежнему.
Протестировал вот так: [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) With Application .DisplayFullScreen = False .DisplayFormulaBar = True .DisplayAlerts = False End With
' ActiveWorkbook.Close True ' Application.Quit End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Application.DisplayAlerts = False Cancel = True End Sub
Private Sub Workbook_Open() Application.DisplayFullScreen = True End Sub
[/vba] Приложение закрывается и книга не сохранятся (как и планировался) если больше открытых книг нет. Если открыто еще книги, тогда на сообщению которые вылетает с запросом о сохранении книги нажать "сохранить", то запрос занового повторяется пока не нажать "не сохранить". почему-то [vba]
Private Sub Workbook_BeforeClose(Cancel As Boolean) If trt Then trt = False: Cancel = True: Exit Sub Application.DisplayFullScreen = False ActiveWindow.DisplayHeadings = True Application.DisplayFormulaBar = True trt = True If Workbooks.Count = 1 Then ThisWorkbook.Saved = True Application.Quit Else If Workbooks.Count = 2 Then If Workbooks(1).Name = "PERSONAL.XLSB" Or Workbooks(2).Name = "PERSONAL.XLSB" Then Workbooks("PERSONAL.XLSB").Close False ThisWorkbook.Saved = True Application.Quit trt = False End If Else End If End If ThisWorkbook.Saved = True End Sub
Private Sub Workbook_Open() Application.DisplayFullScreen = True End Sub
[/vba]
событие Workbook_BeforeClose запускается когда вы уже закрываете эту книгу еще раз в нем вызывать закрытие книги не требуется это будет выполнено по завершению этой процедуры.
переменная trt чтобы повторно событие не запустилось.
а так?
[vba]
Код
Option Explicit Public trt As Boolean
Private Sub Workbook_BeforeClose(Cancel As Boolean) If trt Then trt = False: Cancel = True: Exit Sub Application.DisplayFullScreen = False ActiveWindow.DisplayHeadings = True Application.DisplayFormulaBar = True trt = True If Workbooks.Count = 1 Then ThisWorkbook.Saved = True Application.Quit Else If Workbooks.Count = 2 Then If Workbooks(1).Name = "PERSONAL.XLSB" Or Workbooks(2).Name = "PERSONAL.XLSB" Then Workbooks("PERSONAL.XLSB").Close False ThisWorkbook.Saved = True Application.Quit trt = False End If Else End If End If ThisWorkbook.Saved = True End Sub
Private Sub Workbook_Open() Application.DisplayFullScreen = True End Sub
[/vba]
событие Workbook_BeforeClose запускается когда вы уже закрываете эту книгу еще раз в нем вызывать закрытие книги не требуется это будет выполнено по завершению этой процедуры.
переменная trt чтобы повторно событие не запустилось.K-SerJC
Благими намерениями выстелена дорога в АД.
Сообщение отредактировал K-SerJC - Среда, 11.03.2020, 13:04