Введение:
Идентификация события открытия рабочей книги может быть уважаемые читатели, важным аспектом автоматизации в Excel. В данной статье представлен метод, основанный на использовании VBA, позволяющий отслеживать каждое открытие рабочей книги и сохранять соответствующую информацию в текстовом файле формата CSV.
Шаг 1: Создание класса clsApp
Для начала создадим новый модуль класса с именем clsApp. В этом модуле напишем код, позволяющий отслеживать открытие рабочей книги.
Коротко: этот код создает объект Application с именем НовоеСобытие, поддерживающий обработку событий. Процедура WorkbookOpen вызывается при каждом открытии рабочей книги и передает информацию о книге в процедуру ФайлЖурналаОбновлений.
Давайте разберем код построчно:
- Public WithEvents НовоеСобытие As Application: Объявление публичной переменной НовоеСобытие как объекта Application с ключевым словом WithEvents. Это позволяет этой переменной "подписываться" на события приложения Excel.
- Private Sub НовоеСобытие_WorkbookOpen(ByVal Книга As Excel.Workbook): Объявление частной подпрограммы (процедуры) с именем НовоеСобытие_WorkbookOpen, которая автоматически вызывается при открытии любой рабочей книги в Excel. Принимает аргумент Книга, который представляет открытую рабочую книгу в виде объекта Excel.Workbook.
- Call ФайлЖурналаОбновлений(Книга): Вызов подпрограммы ФайлЖурналаОбновлений, передавая ей открытую книгу в качестве аргумента. Это событие происходит при открытии каждой книги, и оно запускает процедуру, которая записывает информацию о событии в файл.
Шаг 2: Добавление модуля VBA
Теперь необходимо добавить модуль VBA (обычный модуль) в котором пропишем два следующих кода:
Давайте разберем эти два кода построчно и переменную уровня модуля:
Переменная уровня модуля. Dim AppObject As New clsApp: Объявление переменной AppObject как нового экземпляра класса clsApp. Это создает объект типа clsApp, который будет использоваться для отслеживания событий открытия рабочей книги.
- Sub СозданиеНовогоОбъекта(): Объявление подпрограммы (процедуры) с именем СозданиеНовогоОбъекта.
- ' Вызов с помощью Workbook_Open: Комментарий, который поясняет, что эта процедура будет вызываться событием Workbook_Open (при открытии рабочей книги).
- Set AppObject.НовоеСобытие = Application: Присвоение переменной НовоеСобытие объекта AppObject объекта Application. Это устанавливает отслеживание событий для объекта приложения Excel.
Таким образом, код создает экземпляр класса clsApp с именем AppObject и устанавливает отслеживание событий (НовоеСобытие) для объекта приложения Excel (Application). Это позволяет отслеживать события открытия рабочей книги и выполнять соответствующие действия при каждом открытии.
Давайте разберем код построчно:
- Sub ФайлЖурналаОбновлений(Книга): Объявление начала подпрограммы (процедуры) с именем ФайлЖурналаОбновлений, принимающей аргумент Книга, который представляет собой объект Workbook.
- Dim txt As String: Объявление переменной txt как строковой переменной, которая будет использоваться для хранения информации, записываемой в текстовый файл.
- Dim Fname As String: Объявление переменной Fname как строковой переменной, предназначенной для хранения полного пути к файлу журнала.
- On Error Resume Next: Эта инструкция позволяет продолжить выполнение программы, игнорируя ошибки, если таковые возникнут. В данном случае, она используется перед строкой, которая может вызвать ошибку, чтобы код продолжил выполняться, даже если не удастся получить полный путь к рабочей книге.
- txt = Книга.FullName: Получение полного пути к открытой рабочей книге и присвоение этого значения переменной txt.
- txt = txt & "," & Date & "," & Time: Добавление к строке txt дополнительной информации в формате CSV, включающей текущую дату и время.
- txt = txt & "," & Application.UserName: Добавление к строке txt имени пользователя, который открыл рабочую книгу.
- Fname = Application.DefaultFilePath & "\logfile.csv": Формирование полного пути к текстовому файлу журнала (logfile.csv) в каталоге по умолчанию приложения Excel (в моём случае это Мой компьютер -> Документы).
- Open Fname For Append As #1: Открытие файла logfile.csv для добавления данных в конец файла. Файл будет создан, если он не существует.
- MsgBox txt: Вывод окна сообщения с содержимым переменной txt. Это может быть полезно для отладки, чтобы увидеть, что именно будет записано в файл.
- Print #1, txt: Запись строки txt в открытый файл.
- Close #1: Закрытие файла после записи информации.
Символ #1 используется для обозначения файлового номера. В контексте языка VBA и работы с файлами, #1 представляет собой файловый номер, который связан с открытым файлом.
Эта процедура ФайлЖурналаОбновлений в целом служит для записи информации о каждой открытой рабочей книге в текстовый файл в формате CSV.
Шаг 3: Получаем результат
Таким образом, процедура ФайлЖурналаОбновлений записывает ключевую информацию о каждой открытой рабочей книге в текстовый файл logfile.csv. Этот подход позволяет эффективно отслеживать события открытия книг и сохранять необходимую информацию для дальнейшего анализа.
Так при открытии книги выходит сообщение:
А вот как выглядит текстовый файл logfile.csv в формате CSV: