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

VBA Excel № 64.2 Функции с одним аргументом в VBA.

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

Итак, улучшим версию процедуры ЗапросПродаж описанную в статье №64.1 (и назовём процедуру: ЗапросПродаж1) которая обеспечивает удобство, интерактивность и позволяет повторять цикл вычислений, пока пользователь не завершит его, нажав кнопку "Нет". Вот описание этой версии процедуры:

Скриншот с моего ноутбука
Скриншот с моего ноутбука
Эта версия процедуры добавляет следующие усовершенствования:
Она отформатирована так, чтобы отображать объем продаж и комиссию с использованием разделителей разрядов и двух десятичных знаков.
После отображения результатов, процедура запрашивает пользователя, хочет ли он продолжить расчеты. Если пользователь выбирает "Да", процедура вызывает саму себя для нового ввода данных.
Процедура проверяет, была ли нажата кнопка "Отмена" при вводе объема продаж, и в этом случае завершает выполнение, чтобы избежать ошибок при нулевом значении продаж.

Давайте разберем каждую часть макроса "ЗапросПродаж1":

  • Dim Продажи As Long - Эта строка объявляет переменную Продажи как целочисленный тип данных, которая будет использоваться для хранения объема продаж, введенного пользователем.
  • Dim Сообщение As String, Результат As VbMsgBoxResult - Здесь объявляются две переменные: Сообщение для хранения текста сообщения, и Результат для хранения результата, полученного от функции MsgBox. Сообщение будет строкой, а Результат - значением перечисления VbMsgBoxResult, которое будет использоваться для определения действия, выбранного пользователем в окне сообщения.
  • Продажи = Val(InputBox("Введите объем продаж:", "Калькулятор комиссионных с продаж")) - Здесь пользователю предоставляется диалоговое окно InputBox, в котором пользователю предлагается ввести объем продаж. Функция Val используется для преобразования введенного текста в числовое значение, которое затем присваивается переменной Продажи.
  • If Продажи = 0 Then Exit Sub - Этот блок проверяет, была ли нажата кнопка "Отмена" при вводе объема продаж. Если Продажи равны 0 (или пользователь нажал "Отмена"), то макрос завершает выполнение командой Exit Sub, чтобы предотвратить выполнение остальной части макроса.
  • Создание сообщения - В этой части макроса создается текст сообщения, который будет отображен пользователю. С помощью функции Format происходит форматирование значения Продажи и значения, полученного с помощью пользовательской функции КОМИССИОННЫЕ, чтобы отобразить их с разделителями разрядов и двумя десятичными знаками. Сообщение включает информацию о объеме продаж и комиссии.
  • Результат = MsgBox(Сообщение, vbYesNo, "Калькулятор комиссионных с продаж") - Здесь макрос отображает сообщение с помощью функции MsgBox. Параметры Сообщение, vbYesNo и "Калькулятор комиссионных с продаж" используются для настройки вида и кнопок в окне сообщения, а результат (например, "Да" или "Нет"), выбранный пользователем, сохраняется в переменной Результат.
  • If Результат = vbYes Then ЗапросПродаж1 - Этот блок проверяет, была ли выбрана кнопка "Да" в окне сообщения. Если пользователь выбрал "Да", то макрос вызывает сам себя, т.е., процедуру ЗапросПродаж1, что позволяет пользователю повторить ввод объема продаж и расчет комиссии.

Рекомендации по использованию аргументов в пользовательских функциях

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

Давайте рассмотрим пример, чтобы проиллюстрировать важность использования аргументов вместо ссылок на конкретные ячейки. Сначала рассмотрим функцию, которая умножает значение из ячейки A1 на 2, используя ссылку на ячейку:

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

Эта функция может работать, но она может вызвать проблемы, так, например, если ячейка A1 зависит от других ячеек или формул, которые не пересчитываются автоматически. В результате функция может возвращать устаревшие значения или #ЗНАЧ!

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

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

Наука
7 млн интересуются