Подпрограмма Excel VBA: как вызвать Sub в VBA на примере

⚡ Умное резюме

Подпрограммы Excel VBA — это блоки кода, выполняющие задачу без возврата значения. На этой странице рассматриваются правила именования, синтаксис подпрограмм, вызов подпрограммы с помощью кнопки и отличие подпрограммы от функции.

  • 📦 Определение: Подпрограмма выполняет конкретную задачу и не возвращает никакого значения коду, который её вызвал.
  • ♻️ Возможность повторного использования: Одну и ту же подпрограмму можно вызывать много раз из любой точки проекта.
  • 🔤 Правила именования: Имя не содержит пробелов, начинается с буквы или подчеркивания и никогда не является ключевым словом VBA.
  • 🧾 Синтаксис: Функция Private Sub name(ByVal arg As String) открывает блок кода, а функция End Sub закрывает его.
  • 🇧🇷 Вызов: Событие клика по кнопке команды вызывает подпрограмму и передает ей аргументы.
  • ▶ ️ Запуск напрямую: Нажатие клавиши F5, диалоговое окно «Макросы» или ключевое слово «Вызов» запускают подпрограмму без использования кнопки.
  • 🔁 Подфункция или подраздел: Выбирайте функцию, если необходимо вернуть значение, в противном случае выбирайте подпрограмму.

Подпрограмма Excel VBA

Что такое подпрограмма в VBA?

A Подпрограмма в VBA — это фрагмент кода, который выполняет определенную задачу, описанную в коде, но не возвращает результат или значение. Подпрограммы используются для разбиения больших фрагментов кода на небольшие управляемые части. Подпрограммы можно вызывать несколько раз из любого места программы.

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

Зачем использовать подпрограммы

  • Разбейте код на небольшой управляемый код: Средняя компьютерная программа имеет тысячи и тысячи строк исходного кода. Это вносит сложность. Подпрограммы помогают решить эту проблему, разбивая программу на небольшие управляемые фрагменты кода.
  • Code повторное использование. Допустим, у вас есть программа, которой необходим доступ к базе данных, почти все окна программы должны будут взаимодействовать с базой данных. Вместо написания отдельного кода для этих окон вы можете создать функцию, которая обрабатывает все взаимодействия с базой данных. Затем вы можете вызвать его из любого окна, которое захотите.
  • Подпрограммы и функции самодокументируются.. Допустим, у вас есть функция CalculateLoanInterest и другая функция ConnectToDatabase. Просто взглянув на имя подпрограммы/функции, программист сможет сказать, что делает программа.

Перед написанием имени компилятор ожидает, что оно будет соответствовать короткому набору правил.

Правила именования подпрограмм и функций

Чтобы использовать подпрограммы и функции, необходимо следовать ряду правил.

  • Имя подпрограммы или функции вызова VBA не может содержать пробел.
  • Имя подпрограммы вызова VBA Excel или имя функции должно начинаться с буквы или знака подчеркивания. Он не может начинаться с цифры или специального символа.
  • Имя подпрограммы или функции не может быть ключевым словом. Ключевое слово – это слово, имеющее особое значение в VBA. Такие слова, как Private, Sub, Function, End и т. д., являются примерами ключевых слов. Компилятор использует их для конкретных задач.

После выбора допустимого имени само объявление следует установленному шаблону.

Синтаксис подпрограммы VBA

Вам нужно будет включить вкладку «Разработчик» в Excel, чтобы следовать этому примеру. Если вы не знаете, как включить вкладку «Разработчик», прочитайте руководство по Элементы управления VBA в Excel

ЗДЕСЬ в синтаксисе,

Private Sub mySubRoutine(ByVal arg1 As String, ByVal arg2 As String)
    'do something
End Sub

Объяснение синтаксиса

Code Экшн
  • «Частная подпрограмма mySubRoutine(…)»
  • Здесь ключевое слово «Sub» используется для объявления подпрограммы с именем «mySubRoutine» и запуска тела подпрограммы.
  • Ключевое слово Private используется для указания области действия подпрограммы.
  • «ByVal arg1 As String, ByVal arg2 As String»:
  • Он объявляет два параметра строкового типа данных с именем arg1 и arg2.
  • «Конец субтитра»
  • «End Sub» используется для завершения тела подпрограммы.

Следующая подпрограмма принимает имя и фамилию и отображает их в окне сообщения.

Теперь мы собираемся запрограммировать и выполнить эту подпроцедуру. Давайте посмотрим на это.

Как вызвать Sub в VBA

Ниже приведен пошаговый процесс вызова Sub в VBA:

  1. Разработайте пользовательский интерфейс и установите свойства для пользовательских элементов управления.
  2. Добавьте подпрограмму
  3. Напишите код события щелчка для командной кнопки, которая вызывает подпрограмму.
  4. Протестируйте приложение

Шаг 1) Пользовательский интерфейс

Создайте пользовательский интерфейс, как показано на изображении ниже.

Как вызвать Sub в VBA

Установите следующие свойства. Свойства, которые мы устанавливаем:

S / N Управление Свойства Значение
1 КомандаКнопка1 Имя btnDisplayFullName
2 Подпись Полное имя подпрограммы

Теперь ваш интерфейс должен выглядеть следующим образом.

Как вызвать Sub в VBA

Шаг 2) Добавить подпрограмму

  1. Нажмите Alt + F11, чтобы открыть окно кода.
  2. Добавьте следующую подпрограмму
Private Sub displayFullName(ByVal firstName As String, ByVal lastName As String)
    MsgBox firstName & " " & lastName
End Sub

ЗДЕСЬ в коде,

Code Действия
  • «Частный дополнительный дисплейFullName(…)»
  • Он объявляет частную подпрограмму displayFullName, которая принимает два строковых параметра.
  • «ByVal firstName как строка, ByVal фамилия как строка»
  • Он объявляет две переменные параметра firstName и LastName.
  • MsgBox имя Фамилия"
  • Он вызывает сообщениеBox встроенная функция для отображения окна сообщения. Затем она передает переменные 'firstName' и 'lastName' в качестве параметров.
  • Амперсанд «&» используется для объединения двух переменных и добавления пустого пространства между ними.

Шаг 3) Вызов подпрограммы

Вызов подпрограммы из события нажатия командной кнопки.

  • Щелкните правой кнопкой мыши по кнопке управления, как показано на изображении ниже. Выберите «Вид». Code.
  • Откроется редактор кода

Как вызвать Sub в VBA

Добавьте следующий код в редактор кода для события нажатия командной кнопки btnDisplayFullName.

Private Sub btnDisplayFullName_Click()
    displayFullName "John", "Doe"
End Sub

Окно вашего кода теперь должно выглядеть следующим образом

Как вызвать Sub в VBA

Сохраните изменения и закройте окно кода.

Шаг 4) Тестирование кода

На панели инструментов разработчика отключите режим дизайна. Как показано ниже.

Как вызвать Sub в VBA

Шаг 5) Нажмите на командную кнопку «Подпрограмма полного имени».

Вы получите следующие результаты

Как вызвать Sub в VBA

Скачайте указанный выше файл Excel. Code

Кнопка удобна, но это не единственный способ запустить подпрограмму, и в процессе разработки она редко бывает самым быстрым.

Как запустить подпрограмму без кнопки

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

  • Нажмите клавишу F5 в редакторе: Поместите курсор в любое место внутри подпрограммы и нажмите F5. Она запустится немедленно. Это работает только в том случае, если подпрограмма не принимает аргументов, поскольку VBA не может передавать значения.
  • Пошаговое выполнение с помощью клавиши F8: Выполняйте тот же код, по одной строке за раз, чтобы отслеживать изменения каждой переменной в окне «Локальные переменные». Используйте его, когда результат неверен и вам нужно увидеть, в чем причина.
  • Воспользуйтесь диалоговым окном «Макросы»: На вкладке «Разработчик» щелкните «Макросы», выберите имя и нажмите «Запустить». В этом списке отображаются только общедоступные подпрограммы без аргументов, поэтому вспомогательная подпрограмма обычно объявляется приватной.
  • Вызов из другой подпрограммы: Это метод, используемый для любой подпрограммы, принимающей аргументы, и именно на него опирается кнопка команды выше.

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

Sub RunTheGreeting()
    ' Form 1: no Call keyword, no brackets
    displayFullName "John", "Doe"

    ' Form 2: Call keyword, brackets required
    Call displayFullName("Jane", "Roe")
End Sub

Обе строки делают одно и то же. Смешивание двух форм, например, написание скобок без ключевого слова Call, является наиболее распространенной причиной ошибки компиляции «Expected: =», когда подпрограмма принимает более одного аргумента.

Разница между подпрограммой (sub) и функцией (function) в VBA

В VBA существуют два типа процедур: Sub и Function, и новички часто выбирают не тот. Главный вопрос прост: нужно ли вызывающему коду возвращать значение?

Характеристика ниже Функция
Возвращает значение Нет Да, присвоено имени функции.
Объявлено с Суб… Конец сабвуфера Функция… Конец функции
Называется как Заявление на отдельной строке Часть выражения, например, x = myFunc(2)
Можно использовать в ячейке рабочего листа. Нет Да, в качестве определяемой пользователем функции.
Типичное использование Форматирование листа, очистка полей ввода, отображение сообщения. Вычислить сумму, преобразовать значение, найти данные.

Используйте подпрограмму (Sub), когда код работает с рабочей книгой, и Функция VBA когда код выдает ответ, который обрабатывается чем-то другим.

Часто задаваемые вопросы (FAQ)

Приватная подпрограмма (Private Sub) может быть вызвана только изнутри модуля, который её объявил. Публичная подпрограмма (Public Sub) видна каждому модулю в проекте и является единственным типом подпрограмм, отображаемым в диалоговом окне «Макросы».

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

Используйте оператор Exit Sub. Он останавливает процедуру в этом месте и возвращает управление тому, кто её вызвал, что полезно для досрочного завершения работы, если проверка не пройдена.

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

Да. Передайте текст ошибки и строку вызова, и ИИ-помощник определит причины, такие как использование скобок без ключевого слова Call, неправильное количество аргументов или несоответствие типов данных, а затем предоставит исправленную строку.

Подведем итог этой публикации следующим образом: