Когда вы работаете с Excel-документом, к которому имеют доступ другие пользователи, возникает вполне закономерный вопрос: а кто открывал файл и когда это произошло? И здесь на помощь приходит событие Workbook_Open, с которым мы сегодня проведём настоящее расследование.
Вы научитесь создавать невидимый лог активности, отслеживать имя пользователя, дату и время открытия книги, а также узнаете важные отличия между похожими событиями рабочей книги. Всё это — с чёткой логикой, понятным кодом и реальной практической пользой.
📘 Что такое событие Workbook_Open
sWorkbook_Open — это встроенное событие в Excel VBA, которое срабатывает один раз, когда кто-либо открывает файл Excel, при условии, что в нём включены макросы.
Это событие удобно использовать для:
- логирования пользователей;
- отображения приветственного окна;
- инициализации данных при запуске;
- проверки доступа;
- обновления внешних ссылок или формул.
Но мы пойдём дальше: создадим автоматический трекер, который будет сохранять имя пользователя и время каждого открытия книги в скрытом листе.
🧪 Начинаем: где писать код
Все события книги пишутся в модуле "ЭтаКнига" (ThisWorkbook). Чтобы попасть туда:
- Нажмите Alt + F11 — откроется редактор VBA.
- В проекте слева дважды щёлкните ThisWorkbook.
- В выпадающем списке слева выберите Workbook, а справа — Open.
Теперь вы готовы писать код.
🛠️ Шаг 1. Создаём скрытый лист для логов
Создайте новый лист в вашей книге и назовите его, например, Лог.
Переименуйте его, если хотите, и сделайте скрытым: ПКМ по вкладке → Скрыть.
В ячейке A1 напишите Имя пользователя, в B1 — Дата и время.
Теперь — к коду.
🧠 Шаг 2. Логика макроса
Нам нужно:
- Получить ссылку на лист Лог.
- Найти последнюю незаполненную строку.
- Записать в неё имя пользователя и текущее время.
Вот как это реализуется:
Private Sub Workbook_Open()
Dim t1 As Worksheet
Set t1 = ThisWorkbook.Sheets("Лог")
Dim LastRow As Long
LastRow = t1.Cells(Rows.Count, 1).End(xlUp).Row + 1
t1.Cells(LastRow, 1).Value = Application.UserName
t1.Cells(LastRow, 2).Value = Now
End Sub
🔍 Разбор кода по частям
- ThisWorkbook.Sheets("Лог") — доступ к нужному листу.
- Cells(Rows.Count, 1).End(xlUp).Row + 1 — находим первую пустую строку в столбце A.
- Application.UserName — имя текущего пользователя Windows.
- Now — текущие дата и время.
После открытия файла макрос добавит в скрытый лист новую строку с данными.
📌 Практический пример
Откройте файл.
Затем снова зайдите в редактор, сделайте лист Лог видимым и вы увидите:
Имя пользователяДата и время открытияIvan Petrov14.06.2025 22:13:01Ivan Petrov14.06.2025 22:14:56
Таким образом, вы точно знаете, кто и когда открывал документ.
🧠 Советы по улучшению
- 💾 Храните лог в отдельном файле, если не хотите, чтобы пользователи его чистили.
- 🔐 Защитите лист с логами паролем от изменений.
- 👤 Используйте переменную Environ("USERNAME") для получения имени учётной записи, если Application.UserName не подходит.
📢 Подписывайтесь, если вам нравится такая автоматизация!
Если вам интересны умные, практичные VBA-решения, которые реально помогают в работе с Excel, — подписывайтесь на канал Powerworcel. Здесь всё объясняется простыми словами и с фокусом на полезность.
✍ В комментариях напишите: а вы отслеживаете, кто открывает ваши файлы? Какие приёмы используете?
🔄 Бонус: отличие между Workbook_Open и Workbook_Activate
Многие путают эти два события. Разберёмся:
СобытиеКогда срабатываетWorkbook_OpenТолько один раз — при открытии файлаWorkbook_ActivateКаждый раз, когда пользователь переходит к книге
❗ Но Workbook_Activate не сработает, если пользователь просто сворачивает Excel и возвращается обратно. Оно срабатывает только при переключении между разными книгами Excel.
Пример кода для Workbook_Activate:
Private Sub Workbook_Activate()
MsgBox "Вы снова выбрали эту книгу!"
End Sub
🧠 Где это можно использовать?
- 💼 В корпоративных Excel-системах для контроля доступа.
- 🧾 При автоматическом заполнении истории работы с документом.
- 🎓 В учебных проектах для отслеживания студентов.
- 🤖 В сборе статистики использования макросов и Excel-файлов.
🧱 Расширения идеи
Хотите продвинутую версию?
- Записывайте также имя листа, открытого по умолчанию.
- Добавьте столбец с информацией о времени бездействия в файле.
- Используйте Workbook_BeforeClose, чтобы зафиксировать, кто закрывал книгу.
📬 Подводим итоги
Событие Workbook_Open — это незаменимый инструмент для профессиональных Excel-разработчиков. Оно даёт возможность автоматически реагировать на открытие книги: запускать макросы, логировать действия, проверять пользователей и многое другое.
Не забывайте: простой код — не значит слабый код. Даже небольшие приёмы могут дать вам полный контроль над рабочими процессами.
🎯 А дальше?
В следующем уроке вы узнаете:
- как реагировать на сохранение книги с помощью Workbook_BeforeSave;
- как отменить сохранение, если не выполнено важное условие;
- как автоматически сохранять резервную копию.
Вы уже подписались, чтобы не пропустить новую статью?