Excel. Трюки и эффекты. Алексей Гладкий. Читать онлайн. Newlib. NEWLIB.NET

Автор: Алексей Гладкий
Издательство: Гладкий Алексей Анатольевич
Серия:
Жанр произведения: Программы
Год издания: 0
isbn:
Скачать книгу
выше процедуры Procedure вызов с применением именованных параметров выглядит следующим образом:

      Procedure intA:=12, intB:=56

      или

      Procedure intB:=56, intA:=12

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

      Procedure intB:=56

      В данном примере не очень заметны преимущества использования именованных параметров. Другое дело, если необходимо использовать следующую функцию, задав значения только параметров arg3 и arg8:

      Function dhManyArg(Optional arg1, Optional arg2, Optional arg3,

      _

      Optional arg4, Optional arg5, Optional arg6, Optional arg7, _

      Optional arg8)

      ' Инструкции функции

      …

      End Function

      Очевидно, что инструкция

      varRes = dhManyArg(,,"text",,,,,142.23)

      куда менее наглядна и понятна, чем инструкция

      varRes = dhManyArg(arg3:="text",arg8:=142.23)

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

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

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

      Ниже приведен пример процедуры, принимающей аргумент по значению:

      Sub TestByVal(ByVal intArg As Integer)

      ' Какие-то действия, во время которых значение переменной _

      intArg изменяется

      ...

      End Sub

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

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

      Ниже приведен пример процедуры, принимающей аргумент по ссылке:

      Sub TestByRef(ByRef intArg As Integer)

      ' Какие-то действия, во время которых значение переменной _

      intArg изменяется

      ...

      End Sub

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

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

      Определение и