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

VBA Excel № 59. Передача аргументов процедурам в VBA.

Оглавление

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

Роль аргументов

Аргументы в VBA - это переменные или значения, которые передаются процедурам или функциям. Они играют важную роль в работе вашего кода, так как они предоставляют информацию и данные, необходимые для выполнения конкретных задач. Аргументы позволяют процедурам быть более универсальными и гибкими, так как они могут принимать различные типы данных, такие как переменные, константы, выражения, массивы и объекты.

Процедуры и Функции

В VBA существуют два основных типа подпрограмм: процедуры и функции. Процедуры выполняют определенные действия, но не возвращают значения, в то время как функции выполняют действия и возвращают значение. Сейчас остановимся на процедурах и передаче аргументов в них.

Процедуры в VBA могут иметь различное количество и типы аргументов, включая:

- Фиксированное количество аргументов: Процедура может иметь заранее определенное количество аргументов, которые должны быть переданы при вызове.

- Неопределенное количество аргументов: С помощью параметров, таких как ParamArray, вы можете создать процедуры, которые могут принимать переменное количество аргументов.

- Необязательные аргументы: Вы можете определить аргументы как необязательные, позволяя вызывающему коду передавать их при необходимости.

Пример: Условный код

Sub Процедура(Optional Аргумент1 As Integer, Optional Аргумент2 As String = "По умолчанию")

' Ваш код здесь

End Sub

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

Способы передачи аргументов

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

Пример: Передача по значению

При передаче аргументов по значению фактические значения передаются в процедуру. Это означает, что если вы измените значение аргумента внутри процедуры, это не повлияет на исходные данные за пределами процедуры.

  1. Sub Процедура(ByRef Значение As Integer)
  2. Dim ВременнаяПеременная As Integer
  3. ВременнаяПеременная = Значение
  4. ВременнаяПеременная = ВременнаяПеременная + 1
  5. End Sub

  1. Sub Пример()
  2. Dim А As Integer
  3. А = 5
  4. Процедура А
  5. MsgBox А ' Выведет "5",так как значение передано по ссылке
  6. End Sub
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Пример: Передача по ссылке

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

  1. Sub Процедура(Значение As Integer)
  2. Значение = Значение + 1
  3. End Sub
  4. Sub Пример()
  5. Dim А As Integer
  6. А = 5
  7. Процедура А
  8. MsgBox А
  9. ' Выведет "6", так как
  10. ' значение передано по значению
  11. End Sub
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Теперь, давайте рассмотрим различные сценарии и примеры использования аргументов в процедурах VBA.

Пример: Процедура с фиксированным количеством аргументов

В этом примере мы создадим процедуру, которая принимает два аргумента: целое число и строку, и выводит их значения.

  1. Sub ПроцедураСДвумяАргументами(Число As Integer, Текст As String)
  2. MsgBox "Число: " & Число & vbCrLf & "Текст: " & Текст
  3. End Sub

  1. Sub Пример()
  2. ПроцедураСДвумяАргументами 42, "Пример текста"
  3. End Sub
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Пример: Процедура с неопределенным количеством аргументов

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

  1. Sub ПроцедураСПараметромМассива(ParamArray Аргументы())
  2. Dim Результат As String
  3. For Each А In Аргументы
  4. Результат = Результат & А & vbCrLf ‘vbCrLf это константа в библиотеке типов
  5. Next
  6. MsgBox Результат
  7. End Sub

  1. Sub Пример()
  2. ПроцедураСПараметромМассива "Значение1", "Значение2", "Значение3"
  3. End Sub
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Пример: Процедура с необязательными аргументами

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

  1. Sub ПроцедураСНеобязательнымАргументом(Optional Значение As String = "По умолчанию")
  2. MsgBox "Значение: " & Значение
  3. End Sub

  1. Sub Пример()
  2. ПроцедураСНеобязательнымАргумент ' Используется значение по умолчанию
  3. ПроцедураСНеобязательнымАргумент "Новое значение"
  4. End Sub
Скриншот с моего ноутбука
Скриншот с моего ноутбука

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

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

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