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

Открытие книги действительно может замедлить выполнение макроса; требуется время, чтобы получить доступ к диску и загрузить файл. Таким образом, если ваш макрос может проверить, открыта ли книга, прежде чем пытаться ее открыть, вы можете значительно ускорить свои макросы, если книга уже открыта.

Один очень гибкий способ подойти к задаче проверки того, открыта ли книга, — это использовать функцию, которая выполняет проверку, а затем просто возвращает значение ИСТИНА или ЛОЖЬ в зависимости от того, открыта ли книга. Следующий короткий макрос выполняет эту краткую задачу:

Function AlreadyOpen(sFname As String) As Boolean     Dim wkb As Workbook     On Error Resume Next     Set wkb = Workbooks(sFname)

AlreadyOpen = Not wkb Is Nothing     Set wkb = Nothing End Function

Чтобы использовать функцию, просто передайте ей имя книги, которую вы хотите проверить, следующим образом:

sFilename = "MyFileName.xls"

sPath = "C:\MyFolder\MySubFolder\"

If AlreadyOpen(sFilename) Then         'Do not have to open     Else         Workbooks.Open sPath & sFilename     End If

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (10985) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для более старого интерфейса меню Excel здесь:

link: / excel-Checking_if_a_Workbook_is_Already_Open [Проверка, открыта ли уже книга].