Страницы: 1
RSS
Как закрыть только windows(ThisWorkbook.name) при клике на Кнопку в userform?
 
Доброго времени суток! Каким образом возможно закрыть только окно текущей книги, из которой вызван макрос при клике на кнопку в userform. Куда вставлять код - известно.
Подскажите, пожалуйста, верный код закрытие ТОЛЬКО ТЕКУЩЕЙ КНИГИ. Спасибо большое!

Пробовал:
Код
    ActiveWorkbook.Saved = True
    ActiveWorkbook.Save
    Application.Quit

НО ! 1) Появляется запрос о пересохранении 2) Закрываются ВСЕ окна excel
Улыбнись.
 
Код
if Application.windows.Count =1 then 
Application.Quit
else
ActiveWorkbook.Close
end if
По вопросам из тем форума, личку не читаю.
 
Используйте:
Код
ActiveWorkbook.Close
 
БМВ, Вау-вау-вау!!! Это логично и просто! Жаль, что я не додумался сделать привязку к кол-ву открытых книг. Спасибо Вам огромнейщее!

БМВ, БМВ, все хорошо, но появляется запрос на сохранение. Как бы его проигнорировать?

Первое действие - как игнорировать сохранение?
Второй действие - ясно, что писать

Код
If Application.Windows.Count = 1 Then
Application.Quit
Else
ActiveWorkbook.Close False
End If
Изменено: falmrom - 30.07.2019 14:03:16
Улыбнись.
 
(удалить1)
Изменено: falmrom - 30.07.2019 14:03:03
Улыбнись.
 
(удалить)
Изменено: falmrom - 30.07.2019 14:02:46
Улыбнись.
 
Цитата
falmrom написал:
появляется запрос на сохранение. Как бы его проигнорировать?
Может быть сообщить Excel, что уже сохранено - Saved? ))
 
Юрий М, спасибо!

Решение:
Код
If Application.Windows.Count = 1 Then
ActiveWorkbook.Saved = True
Application.Quit
Else
ActiveWorkbook.Close False
End If
Улыбнись.
 
Юрий М, БМВ, в первом случае закрывается просто книга, а не окно Excel почему-то. Как быть, товарищи?
Улыбнись.
 
Application.Quit закроет приложение, ActiveWorkbook.Close - книгу. Что не так?
 
Юрий М, закрываю из userform. Макрос почему-то думает, что кол-во окон excell более 1. Не могу разобраться.



upd:


Исправил кол-во окон ( написал с учетом userfrom и все заработало )

Код
Private Sub CommandButton2_Click()
    On Error Resume Next
    
msg = MsgBox("Закрыть окно формирования нового контрагента?", vbYesNo + vbQuestion, "")

If msg = vbNo Then Exit Sub

'При закрытии формы - выходим из excel
Unload Me
Application.ScreenUpdating = True

'+++++Закрываем книгу++++++
If Application.Windows.Count = 2 Then
    ActiveWorkbook.Saved = True
    Application.DisplayAlerts = False
    Application.EnableEvents = False
    MsgBox 1
    Application.Quit
    Application.DisplayAlerts = True
    Application.EnableEvents = False
      Else
      MsgBox Application.Windows.Count
    ActiveWorkbook.Close False
End If
'++++++++++++++++++++++++++
End Sub
Изменено: falmrom - 30.07.2019 14:28:56
Улыбнись.
 
Наверное, следовало считать не количество окон, а количество книг - Application.Workbooks.Count. Если они в одном приложении.
 
Юрий М, источник Вашей логики - Ваши знания! Спасибо Вам большое!
Улыбнись.
 
Муржалуйста! )
 
Нужно учитывать, что бывает еще и невидимая личная книга макросов.
Код
Sub MyClose()
  Dim i As Long, wb As Workbook
  For Each wb In Application.Workbooks
    If wb.Windows(1).Visible Then
      i = i + 1
      If i > 1 Then Exit For
    End If
  Next
  If i = 1 Then
    MsgBox "Одна книга, приложение будет закрыто без сохранение активной книги"
    ActiveWorkbook.Saved = True
    Application.Quit
  Else
    MsgBox "Книг: " & i & " шт, активная будет закрыта без сохранения"
    ActiveWorkbook.Close SaveChanges:=False
  End If
End Sub
Изменено: ZVI - 30.07.2019 15:50:04
Страницы: 1
Наверх