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

VBA Excel № 63.1 Функции без аргументов в VBA.

Оглавление

В этой и следующей статье будет приведен ряд примеров, иллюстрирующих оптимальное использование аргументов функций. Кстати это касается также процедур (Sub).

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

Функции без аргументов

Аналогично процедурам, пользовательские функции могут быть созданы без использования аргументов. В Microsoft Excel существует несколько встроенных функций, которые не принимают аргументов, такие как СЛЧИС(), СЕГОДНЯ() и ТДАТА(). Создание собственных аналогов таких функций также не представляет особой сложности.

Давайте рассмотрим пример простой функции, которая не использует аргументы. Эта функция возвращает значение свойства "UserName" объекта Application. Значение "UserName" отображается в диалоговом окне Excel "Параметры Excel" (в разделе "Основные") и хранится в системном реестре операционной системы Windows.

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

Когда вы вводите следующую формулу в ячейку, она отобразит имя текущего пользователя (предполагается, что оно сохранено в реестре):

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

Этот код создает пользовательскую функцию "Пользователь", которая не принимает аргументы и возвращает имя текущего пользователя, используя свойство "UserName" объекта Application. Такие функции без аргументов могут быть полезными, когда требуется получить информацию или выполнить операции, которые не зависят от внешних параметров.

При использовании функции без аргументов в формуле рабочего листа в Microsoft Excel необходимо указать пустые скобки после имени функции. Это требование обязательно для формульных выражений, и оно обеспечивает правильное выполнение функции. Однако, если функция вызывается в процедуре VBA, то указание пустых скобок не обязательно. Оно, тем не менее, полезно, так как явно указывает, что вызывается именно функция, а не процедура.

Функции-оболочки без аргументов

В программировании на VBA, как и в Microsoft Excel, вы можете создавать пользовательские функции-оболочки, которые возвращают свойства или результаты встроенных функций VBA. Эти функции-оболочки могут быть полезными для удобства и повторного использования кода. Давайте рассмотрим несколько примеров функций-оболочек, которые не имеют аргументов:

1. Получение названия папки, где установлен Excel:

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

Выражение ПАПКАЭКСЕЛЬ = Application.Path в данном контексте означает, что в пользовательской функции ПАПКАЭКСЕЛЬ устанавливается значение равное пути, в котором установлен Microsoft Excel. Это путь к каталогу, где находится исполняемый файл Excel.

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

Когда функция ПАПКАЭКСЕЛЬ вызывается, она присваивает переменной ПАПКАЭКСЕЛЬ значение, которое возвращает встроенное свойство Application.Path. Это свойство предоставляет доступ к информации о приложении Excel, в данном случае к папке, где Excel установлен на компьютере.

2. Получение количества листов в рабочей книге:

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

Давайте разберем функцию по частям:

Application.Caller - это объект, который представляет собой ячейку, вызвавшую пользовательскую функцию. В данном случае, это ячейка, в которой была введена формула с функцией КОЛИЧЕСТВО_ЛИСТОВ().

Application.Caller.Parent - это родительский объект для ячейки, который представляет рабочий лист, на котором находится вызывающая ячейка.

Application.Caller.Parent.Parent - это родительский объект для рабочего листа, который представляет собой книгу (рабочую книгу), в которой находится рабочий лист.

Sheets.Count - это свойство объекта рабочей книги, которое возвращает количество листов в данной книге.

3. Получение имени текущего листа:

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

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

Application.Caller - это объект, который представляет собой ячейку, вызвавшую пользовательскую функцию. В данном случае, это ячейка, в которой была введена формула с функцией НАЗВАНИЕ_ЛИСТА().

Application.Caller.Parent - это родительский объект для ячейки, который представляет рабочий лист, на котором находится вызывающая ячейка.

Name - это свойство объекта рабочего листа, которое возвращает его имя.

Таким образом, выражение НАЗВАНИЕ_ЛИСТА = Application.Caller.Parent.Name используется для того, чтобы в пользовательской функции НАЗВАНИЕ_ЛИСТА () получить имя рабочего листа, на котором находится вызывающая ячейка.

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

Таким образом можно создать функцию-оболочку для получения другой полезной информации, например:

- Местоположение шаблона (Application.TemplatesPath).

- Местоположение файла по умолчанию (Application.DefaultFilePath).

- Версию Excel (Application.Version).

Примечание. Нужно учесть, что в связи с появлением в Excel 2013 новой функции ЛИСТЫ () от функции КОЛИЧЕСТВО_ЛИСТОВ () можно отказаться.

Такие функции могут значительно упростить доступ к важным параметрам Excel.

Продолжение следует…