Найти в Дзене
VBA Excel с нуля

VBA Excel № 99. Идентификация открытия рабочей книги.

Введение: Идентификация события открытия рабочей книги может быть уважаемые читатели, важным аспектом автоматизации в Excel. В данной статье представлен метод, основанный на использовании VBA, позволяющий отслеживать каждое открытие рабочей книги и сохранять соответствующую информацию в текстовом файле формата CSV. Шаг 1: Создание класса clsApp Для начала создадим новый модуль класса с именем clsApp. В этом модуле напишем код, позволяющий отслеживать открытие рабочей книги. Коротко: этот код создает объект Application с именем НовоеСобытие, поддерживающий обработку событий. Процедура WorkbookOpen вызывается при каждом открытии рабочей книги и передает информацию о книге в процедуру ФайлЖурналаОбновлений. Давайте разберем код построчно: Шаг 2: Добавление модуля VBA Теперь необходимо добавить модуль VBA (обычный модуль) в котором пропишем два следующих кода: Давайте разберем эти два кода построчно и переменную уровня модуля: Переменная уровня модуля. Dim AppObject As New clsApp: Объявлен
Оглавление
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Введение:

Идентификация события открытия рабочей книги может быть уважаемые читатели, важным аспектом автоматизации в 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:

Скриншот с моего ноутбука
Скриншот с моего ноутбука