01 Что делает макрос
При автоматическом открытии книги, необходимо учитывать, что может произойти при попытке открытия книги, которая уже открыта. Обычно Excel пытается открыть файл еще раз, с предупреждением, что любые несохраненные изменения будут потеряны. В VBA есть хороший инструмент, который знает, как определить открыта ли книга, прежде чем пытаться открыть его снова.
Первое, что надо заметить, что это функция, а не процедура Sub. Мы проверяем файл, чтобы увидеть, назначен ли он переменной объекта. Только открытые книги могут быть присвоены переменной объекта. Когда мы пытаемся назначить закрытую книгу для переменной, возникает ошибка. Так что, если данная книга может быть назначена, книга открыта, если возникает ошибка, книга закрыта.
02 Код функции
Function
FileIsOpenTest(TargetWorkbook
As
String
)
As
Boolean
'Шаг 1: Объявить переменные
Dim
TestBook
As
Workbook
'Шаг 2: проверка на ошибки
On
Error
Resume
Next
'Шаг 3: Попробуйте проверить книгу
Set
TestBook = Workbooks(TargetWorkbook)
'Шаг 4: Если ошибки не произошло, книга уже открыта
If
Err.Number = 0
Then
FileIsOpenTest =
True
Else
FileIsOpenTest =
False
End
If
End
Function
03 Как работает макрос
1. Первое, что макрос делает – указывает переменную строку, содержащую имя файла, который выбирает пользователь. TestBook это имя переменной строки.
2. В шаге 2, мы проверяем Excel на ошибки. В случае ошибки, возобновить код. Без этой строки код остановится при возникновении ошибки. Опять же, мы проводим тестирование данного файла, чтобы увидеть, назначен ли он переменной объекта. Поэтому, если данная книга может быть назначена, она открыта, если возникает ошибка, она закрыта. Если возникла ошибка, нам нужно знать код.
3. На шаге 3, присваиваем книге переменную объекта TestBook. Сама строка переменной называется TargetWorkbook. TargetWorkbook передает функции в объявлении функции (см. первую строку кода). Данная функция устраняет необходимость жесткого кодирования имени книги, что позволяет нам передать его в качестве переменной.
4. На шаге 4, проверяем, произошла ли ошибка. Если ошибки не произошло, книга открыта, поэтому мы устанавливаем FileIsOpenTest в True. Если произошла ошибка, это означает, что книга не открыта. В этом случае мы устанавливаем FileIsOpenTest значение False.
Эта функция может быть использована для оценки любого файла, который передаст к нему, через его TargetWorkbook аргумент. Мы будем использовать эту функцию в макросе. Здесь мы используем макрос, который открывает конкретную книгу, но в этот раз создаем новую функцию FileIsOpenTest, чтобы убедиться, что пользователь не может открыть уже открытый файл.
04 Код макроса
Sub
MacroOtkritaLiKniga()
'Шаг 1: Определить переменную строки.
Dim
FName
As
Variant
Dim
FNFileOnly
As
String
'Шаг 2: Метод GetOpenFilename активизирует диалоговое окно.
FName = Application.GetOpenFilename( FileFilter:=
"Excel Workbooks,*.xl*"
, _
Title:=
"Выберите книгу, которую нужно открыть"
, _
MultiSelect:=
False
)
'Шаг 3: Откройте файл, если он еще не открыт.
If
FName <>
False
Then
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
05 Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
1. Активируйте редактор Visual Basic, нажав ALT + F11.
2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
3. Выберите Insert➜Module.
4. Введите или вставьте оба кода во вновь созданном модуле.
5. По желанию, можно назначить второй макрос к кнопке – он будет открывать файл
06 Скачать файл
Автор проекта
Дмитрий Якушев
Привет! Меня зовут Дмитрий. С 2014 года Microsoft Cretified Trainer. Вместе с командой управляем этим сайтом. Наша цель - помочь вам эффективнее работать в Excel.
Изучайте наши статьи с примерами формул, сводных таблиц, условного форматирования, диаграмм и макросов. Записывайтесь на наши курсы или заказывайте обучение в корпоративном формате.
Сайт https://akademia-excel.ru/
ИП Якушев Дмитрий Александрович
ОГРНИП: 314501721200022
ИНН: 501706813807
Образовательная лицензия № Л035-01255-50/01194039
Почта: info@akademia-excel.ru
Телефон для связи: + 7 (958) 697-73-88, + 7 (495) 145-23-86
Регистрация на сайте означает согласие с пользовательским соглашением и на получение рассылки и рекламных материалов.
Политика в отношении обработки и защиты персональных данных.
Банковские реквизиты:
Расчетный счет 40802810500000003597
Банк АО «Тинькофф Банк»
Юридический адрес Банка Москва, 123060,1-й Волоколамский проезд, д. 10, стр. 1
Корр. счет Банка 30101810145250000974
ИНН Банка 7710140679
БИК Банка 044525974
Подписывайтесь на нас в соц.сетях:
Сайт https://akademia-excel.ru/
ИП Якушев Дмитрий Александрович
ОГРНИП: 314501721200022
ИНН: 501706813807
Образовательная лицензия № Л035-01255-50/01194039
Банковские реквизиты:
Расчетный счет 40802810500000003597
Банк АО «Тинькофф Банк»
Юридический адрес Банка Москва, 123060,1-й Волоколамский проезд, д. 10, стр. 1
Корр. счет Банка 30101810145250000974
ИНН Банка 7710140679
БИК Банка 044525974
Регистрация на сайте означает согласие с пользовательским соглашением и на получение рассылки и рекламных материалов.
Политика в отношении обработки и защиты персональных данных.
Почта: info@akademia-excel.ru
Телефон для связи: + 7 (958) 697-73-88, + 7 (495) 145-23-86
Написать в тех.поддержку
Подписывайтесь:
авторизуйтесь