Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Открыта или закрыта книга (проверка состояния)

    Открыта или закрыта книга Excel? Проверяем с помощью кода VBA по краткому или полному имени файла, используя объектную переменную, цикл или оператор Open.

    Проверка по краткому имени

    Способ проверки по краткому имени, открыта ли рабочая книга, позволяет определить состояние проверяемой книги в том же экземпляре приложения Excel, в котором открыта книга с проверяющим кодом.

    Использование объектной переменной

    Вариант пользовательской функция VBA Excel, предназначенной для проверки, открыта или закрыта рабочая книга, путем определения результата присвоения ссылки на нее объектной переменной. Присвоение состоялось (BookOpenClosed = True) – книга открыта, произошла ошибка и присвоение не состоялось (BookOpenClosed = False) – книга закрыта.

    Аргумент функции:

    • wbName – краткое имя проверяемой рабочей книги.

    Перебор открытых книг циклом

    Этот вариант функции BookOpenClosed перебирает с помощью цикла все открытые книги Excel и проверяет их краткие имена на совпадение с кратким именем проверяемой книги. Совпадение найдено (BookOpenClosed = True) – книга открыта, совпадение не найдено (BookOpenClosed = False) – книга закрыта.

    В коллекцию Workbooks входят и скрытые книги, в том числе Личная книга макросов, и книга с функцией.

    Проверка по полному имени

    Проверка по полному имени с помощью оператора Open позволяет узнать, открыта ли рабочая книга каким-либо другим процессом: текущим экземпляром Excel, в котором открыта книга с проверяющим кодом, другим экземпляром Excel или сторонним приложением.

    Аргумент функции:

    • wbFullName – полное имя проверяемой рабочей книги.

    Эта функция открывает с помощью оператора Open файл проверяемой книги с разрешением чтения и записи (параметр access) и запретом чтения и записи, если этот файл уже открыт другим процессом (параметр lock).

    Если файл уже открыт другим процессом, а указанный тип доступа (параметр access) не разрешен (параметр lock), операция открытия завершится с ошибкой, а выражение (Err.Number <> 0) возвратит значение True.

    Примеры проверки состояния книги

    По краткому имени

    По полному имени


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    6 комментариев для “VBA Excel. Открыта или закрыта книга (проверка состояния)”

    1. Большое спасибо за подробную информацию

    2. Примеры проверки состояния книги
      По краткому имени
      Сначала вставляем функцию, потом код в макрос.
      все работает

    3. Добрый день!
      При вставке данной функции появляется ошибка «Sub or function not defined». Что это значит и как ее исправить?

      1. Евгений

        Здравствуйте, Анна!
        Такая ошибка может произойти, когда имя функции в вызывающей ее процедуре записано с ошибкой. Также, обратите внимание, что функция BookOpenClosed должна быть с таким именем одна в модуле.

    4. Добрый день!
      А если есть две формы, для каждой своя кнопка для UserForm.Show.
      В первой есть
      Public wb_targ As Workbook
      а далее всё определяется для открываемого файла и выполняется
      Set wb_targ = Workbooks(TargetFileName)
      Первая форма закрывается, работаем во второй. Это в норме. Но если вызвать сразу вторую форму (т.е. не будет открытого Workbooks(TargetFileName)), то как во второй форме проверить наличие открытой книги, ведь я не знаю заранее её имя.
      (можно, наверное, TargetFileName сделать глобальной и её смотреть во второй форме. Но тема Вашего урока "Книга (проверка состояния)". Хочется решить "по теме", с неизвестным именем).
      Перепробовал, кажется, всё по типу If wb_targ.FullName = ""
      Не прокатило… обломался (:
      пришлось прятать вторую кнопку, пока по первой не пройдутся.
      Спасибо.

      1. Евгений

        Здравствуйте, Алик!
        Проверить состояние книги с неизвестным именем не получится.

    Обсуждение закрыто.