Что делает макрос
Первое, что надо заметить, что это функция, а не процедура Sub. Мы проверяем файл, чтобы увидеть, назначен ли он переменной объекта. Только открытые книги могут быть присвоены переменной объекта. Когда мы пытаемся назначить закрытую книгу для переменной, возникает ошибка. Так что, если данная книга может быть назначена, книга открыта; если возникает ошибка, книга закрыта.
Код функции
Function FileIsOpenTest(TargetWorkbook As String) As Boolean
Dim TestBook As Workbook '1 Объявляем переменные
On Error Resume Next '2 Проверяем на ошибки
Set TestBook = Workbooks(TargetWorkbook) '3 Попробуем проверить книгу
If Err.Number = 0 Then '4 Если ошибки не произошло, то книга уже открыта
FileIsOpenTest = True
Else
FileIsOpenTest = False
End If
End Function
Как работает этот код
- Первое, что макрос делает – указывает переменную строку, содержащую имя файла, который выбирает пользователь. TestBook это имя переменной строки.
- В шаге 2, мы проверяем Excel на ошибки. В случае ошибки, возобновить код. Без этой строки код остановится при возникновении ошибки. Опять же, мы проводим тестирование данного файла, чтобы увидеть, назначен ли он переменной объекта. Поэтому, если данная книга может быть назначена, она открыта; если возникает ошибка, она закрыта. Если возникла ошибка, нам нужно знать код.
- На шаге 3, присваиваем книге переменную объекта TestBook. Сама строка переменной называется TargetWorkbook. TargetWorkbook передает функции в объявлении функции (см первую строку кода). Данная функция устраняет необходимость жесткого кодирования имени книги, что позволяет нам передать его в качестве переменной.
- На шаге 4, проверяем, произошла ли ошибка. Если ошибки не произошло, книга открыта, поэтому мы устанавливаем FileIsOpenTest в True. Если произошла ошибка, это означает, что книга не открыта. В этом случае мы устанавливаем FileIsOpenTest значение false.
Это функция, которая может быть использована для оценки любого файла, который передаст к нему, через его TargetWorkbook аргумент. Мы будем использовать затем эту функцию в макросе. Следующий макрос показывает, как реализовать эту функцию. Здесь мы используем одни и те же макросы, которые вы видели в предыдущем разделе, "Макрос 7: открытие конкретной книги, определенной пользователем», но на этот раз, мы создаем новую функцию FileIsOpenTest, чтобы убедиться, что пользователь не может открыть уже открытый файл.
Код макроса
Sub Macro8()
Dim FName As Variant '1 Определить переменную строки.
Dim FNFileOnly As String
FName = Application.GetOpenFilename( _
FileFilter:="Excel Workbooks,*.xl*", _
Title:="Выбери файл, который надо открыть", _
MultiSelect:=False)
'2 Метод GetOpenFilename активизирует диалоговое окно, в котором:
'FileFilter - определяем тип файла
'Title - заголовок окна
'MultiSelect - множественный выбор
If FName <> False Then '3 Откройте выбранный файл, если он еще не открыт
FNFileOnly = StrReverse(Left(StrReverse(FName), InStr(StrReverse(FName), "\") - 1))
If FileIsOpenTest(FNFileOnly) = True Then
MsgBox "Выбранный файл уже открыт"
Else
Workbooks.Open Filename:=FName
End If
End If
End Sub
Как использовать
1
|