Найти тему
VBA Excel с нуля

VBA Excel № 84. События Workbook: Activate, SheetActivate, NewSheet.

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

Событие Activate

Следующий код выполняется каждый раз при активации рабочей книги, раскрывая активное окно на весь экран.

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

Строка ActiveWindow.WindowState = xlMaximized используется для управления состоянием окна в рабочем приложении Microsoft Excel. Данная строка кода устанавливает состояние окна в "xlMaximized", что означает максимальное увеличение окна на весь экран.

Давайте разберемся с каждой частью строки кода: ActiveWindow.WindowState = xlMaximized

  1. - ActiveWindow: Это объект, представляющий текущее активное окно в Excel, т.е., окно, которое в данный момент находится в фокусе.
  2. - WindowState: Это свойство объекта ActiveWindow, которое определяет или устанавливает текущее состояние окна.
  3. - xlMaximized: Это константа, предоставленная Excel VBA, которая представляет значение для максимального увеличения окна.

Событие SheetActivate

Блок кода описанный ниже выполняется при активации любого листа в рабочей книге. Если активированный лист является рабочим, то выделяется ячейка А1. В случае, если это не рабочий лист или лист диаграммы, никакие действия не предпринимаются.

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

Давайте разберем этот код по частям:

  1. Private Sub Workbook_SheetActivate(ByVal Sh As Object): Эта строка обозначает начало объявления подпроцедуры (Sub), связанной с событием активации листа (SheetActivate). Workbook_SheetActivate указывает, что это событие относится к рабочей книге в целом.
  2. (ByVal Sh As Object): Это объявление параметра для подпроцедуры. ByVal означает, что параметр передается по значению (копируется), и Sh As Object указывает, что параметр Sh будет использоваться для представления объекта листа.
  3. If TypeName(Sh) = "Worksheet" Then: Это условие проверяет тип объекта листа, переданного параметром Sh. Функция TypeName(Sh) возвращает строку, представляющую тип объекта. Если этот тип равен "Worksheet" (то есть лист является рабочим листом), то выполняется следующий блок кода.
  4. Range ("A1").Select: Эта строка кода выбирает (выделяет) ячейку A1 на активном листе. Таким образом, при активации любого рабочего листа в книге, эта подпроцедура автоматически выделит ячейку A1.

Этот код может быть полезен, например, если вы хотите, чтобы при переключении между листами пользователь всегда видел содержимое ячейки A1 на активном листе.

Событие NewSheet

Блок кода на скриншоте ниже запускается каждый раз, когда в рабочей книге создается новый лист. При этом новый лист передается в процедуру в качестве параметра. Важно учитывать, что новый лист может быть как обычным рабочим листом, так и листом диаграммы. Поэтому в процедуре обязательно осуществляется проверка на тип листа.

Если новый лист является рабочим, то в коде предусмотрено создание записи в ячейке A1, содержащей информацию о дате и времени добавления данного листа. Это позволяет автоматически фиксировать момент создания нового листа и, возможно, внести соответствующую информацию, которая может быть полезной для отслеживания изменений в документе.

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

Разберем код:

Private Sub Workbook_NewSheet(ByVal Sh As Object): Эта строка обозначает начало объявления подпроцедуры (Sub) для события "NewSheet", связанного с добавлением нового листа в рабочую книгу. Workbook_ указывает, что это событие относится к рабочей книге в целом.

(ByVal Sh As Object): Это объявление параметра для подпроцедуры. ByVal означает, что параметр передается по значению (копируется), и Sh As Object указывает, что параметр Sh будет использоваться для представления объекта нового листа.

If TypeName(Sh) = "Worksheet" Then: Это условие проверяет тип объекта нового листа, переданного параметром Sh. Функция TypeName(Sh) возвращает строку, представляющую тип объекта. Если этот тип равен "Worksheet" (то есть лист является рабочим листом), то выполняется следующий блок кода.

Sh.Range("A1") = "Добавлен лист " & Now(): В этой строке кода устанавливается значение ячейки A1 на новом листе. В данном случае, в ячейке записывается текст "Добавлен лист " и текущая дата и время, полученные с помощью функции Now().

Таким образом, на новом листе автоматически создается запись о времени его добавления.

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