Обучение Excel для всех
Обучение Excel
БЕЗ ВЫХОДНЫХ

Макросы

Главная » Макросы » Готовые макросы » Работа с книгами Скачать Excel-файл

Определяем, открыта ли книга

Что делает макрос


Первое, что надо заметить, что это функция, а не процедура Sub. Мы проверяем файл, чтобы увидеть, назначен ли он переменной объекта. Только открытые книги могут быть присвоены переменной объекта. Когда мы пытаемся назначить закрытую книгу для переменной, возникает ошибка. Так что, если данная книга может быть назначена, книга открыта; если возникает ошибка, книга закрыта.

Код функции

  1. Function FileIsOpenTest(TargetWorkbook As String) As Boolean
  2. Dim TestBook As Workbook                 '1 Объявляем переменные
  3. On Error Resume Next                     '2 Проверяем на ошибки
  4. Set TestBook = Workbooks(TargetWorkbook) '3 Попробуем проверить книгу
  5.    If Err.Number = 0 Then                '4 Если ошибки не произошло, то книга уже открыта
  6.       FileIsOpenTest = True
  7.    Else
  8.       FileIsOpenTest = False
  9.    End If
  10. End Function

Как работает этот код


  1. Первое, что макрос делает – указывает переменную строку, содержащую имя файла, который выбирает пользователь. TestBook это имя переменной строки.
  2. В шаге 2, мы проверяем Excel на ошибки. В случае ошибки, возобновить код. Без этой строки код остановится при возникновении ошибки. Опять же, мы проводим тестирование данного файла, чтобы увидеть, назначен ли он переменной объекта. Поэтому, если данная книга может быть назначена, она открыта; если возникает ошибка, она закрыта. Если возникла ошибка, нам нужно знать код.
  3. На шаге 3, присваиваем книге переменную объекта TestBook. Сама строка переменной называется TargetWorkbook. TargetWorkbook передает функции в объявлении функции (см первую строку кода). Данная функция устраняет необходимость жесткого кодирования имени книги, что позволяет нам передать его в качестве переменной.
  4. На шаге 4, проверяем, произошла ли ошибка. Если ошибки не произошло, книга открыта, поэтому мы устанавливаем FileIsOpenTest в True. Если произошла ошибка, это означает, что книга не открыта. В этом случае мы устанавливаем FileIsOpenTest значение false.

Это функция, которая может быть использована для оценки любого файла, который передаст к нему, через его TargetWorkbook аргумент. Мы будем использовать затем эту функцию в макросе. Следующий макрос показывает, как реализовать эту функцию. Здесь мы используем одни и те же макросы, которые вы видели в предыдущем разделе, "Макрос 7: открытие конкретной книги, определенной пользователем», но на этот раз, мы создаем новую функцию FileIsOpenTest, чтобы убедиться, что пользователь не может открыть уже открытый файл.

Код макроса

  1. Sub Macro8()
  2. Dim FName As Variant '1 Определить переменную строки.
  3. Dim FNFileOnly As String
  4. FName = Application.GetOpenFilename( _
  5.     FileFilter:="Excel Workbooks,*.xl*", _
  6.     Title:="Выбери файл, который надо открыть", _
  7.     MultiSelect:=False)
  8. '2 Метод GetOpenFilename активизирует диалоговое окно, в котором:
  9.     'FileFilter - определяем тип файла
  10.     'Title - заголовок окна
  11.     'MultiSelect - множественный выбор
  12. If FName <> False Then '3 Откройте выбранный файл, если он еще не открыт
  13.     FNFileOnly = StrReverse(Left(StrReverse(FName), InStr(StrReverse(FName), "\") - 1))
  14.     If FileIsOpenTest(FNFileOnly) = True Then
  15.         MsgBox "Выбранный файл уже открыт"
  16.     Else
  17.         Workbooks.Open Filename:=FName
  18.     End If
  19. End If
  20. End Sub

Как использовать


1

Категория: Работа с книгами
Просмотров: 1651
Всего комментариев: 0