2016-07-28 3 views
4

У меня есть одна открытая книга с кнопкой «SaveClose». Я хочу, чтобы событие на этой кнопке закрыло все приложения excel, если это последняя открытая книга. Дело в том, что есть вероятность, что может быть неизвестный open.xlsb open или любая другая открытая макрокоманда, которая не видна, я хочу знать, открыта ли какая-либо другая работающая рабочая книга excel. Есть ли проверка не видимой книги? Если это последняя книга, близко первенствует приложение, если не закрывать активную рабочую книгу, вот что я получил:Закрыть excel, если это последняя книга?

Sub CloseForceSave() 

'Save the workbook. 
ThisWorkbook.Save 

'If this is the only workbook opened in the current session, then... 
If Workbooks.Count = 1 Then "or Workbooks.Count = 2" to account for personal.xlsb 
'...quit Excel 
Application.Quit 
'Else... 
Else 
'...close the active workbook 
ThisWorkbook.Close 
End If 

End Sub 

ответ

2

Когда я делаю это я просто игнорировать любые скрытые книги. Если есть только одна книга с видимым окном, я оставляю приложение. Я не знаю лучшего способа подсчета, чем цикл, но у меня никогда не было достаточно рабочих книг, чтобы это было проблемой производительности.

Function VisibleWorkbookCount() As Long 

    Dim wb As Workbook 
    Dim wd As Window 
    Dim lReturn As Long 

    For Each wb In Application.Workbooks 
     For Each wd In wb.Windows 
      If wd.Visible Then 
       lReturn = lReturn + 1 
       Exit For 
      End If 
     Next wd 
    Next wb 

    VisibleWorkbookCount = lReturn 

End Function 
Смежные вопросы