Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры ПОП.doc
Скачиваний:
4
Добавлен:
27.10.2018
Размер:
284.67 Кб
Скачать

6.Пользовательские функции для массивов рабочего листа Excel.

  Обычно  в вызове процедуры не может быть больше аргументов, чем в ее объявлении. Если точное число аргументов, которые  предстоит использовать, неизвестно, то можно объявить массив параметров, который позволяет процедуре  принять в качестве параметра  массив значений. При определении  процедуры необязательно указывать  количество элементов в массиве  параметров. Размер массива определяется заново при каждом вызове процедуры.

  Объявление  ParamArray

  Ключевое  слово ParamArray используется для обозначения массива параметров в списке параметров. Действуют следующие правила.

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

  • Массив параметров должен передаваться по значению. Рекомендуется включать явным образом ключевое слово ByVal в определение процедуры.

  • Массив параметров всегда является необязательным. По умолчанию его значением является пустой одномерный массив с заданным для массива параметров типом элемента массива.

  • Все параметры, предшествующие в списке массиву параметров, должны быть обязательными. Массив параметров должен быть единственным опциональным параметром.

  Вызов ParamArray

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

  • Ничего, т.е. опустить аргумент ParamArray. В этом случае процедуре передается пустой массив. Такой же результат дает использование ключевого слова Nothing (Visual Basic).

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

  • Массив с элементами того же типа, что и в массиве параметров.

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

  Следующий пример определяет процедуру с массивом параметров и выводит значения всех элементов массива, переданных массиву  параметров.

  Sub studentScores(ByVal name As String, ByVal ParamArray scores() As String)

      Debug.WriteLine("Scores for " & name & ":" & vbCrLf)

      ' Use UBound to determine largest subscript of the array.

      For i As Integer = 0 To UBound(scores, 1)

          Debug.WriteLine("Score " & i & ": " & scores(i))

      Next i

  End Sub

  В следующих  примерах показаны типичные варианты вызова процедуры studentScores.

  Call studentScores("Anne", "10", "26", "32", "15", "22", "24", "16")

  Call studentScores("Mary", "High", "Low", "Average", "High")

  Dim JohnScores() As String = {"35", "Absent", "21", "30"}

  Call studentScores("John", JohnScores)   

 

7. Особенности разработки пользовательских функций на vba. Способ передачи параметров.

  Подпрограммы - набор команд, с помощью которых можно решать определенную задачу

  Синтаксис процедур типа Sub

  Sub имя ([аргументы])

  операторы

  End Sub

   [аргументы] - необязательный список формальных  параметров. Если аргументов нет  (список пустой), то подпрограмма  трактуется как макрос

  Вызов процедуры  Sub

  а) с ключевым словом CALL

  б) без  ключевого слова CALL ( в этом случае список фактических параметров пишут без скобок)

  Примеры:

  Sub Posob(Dochod,RazmS)              Обращения к подпрограмме:

  …     CALL Posob(1300,3)  Posob  1300, 3

  End Sub 

  Функция

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

  Синтаксис функции:

        Function имя ([аргументы]) [As тип]

        операторы

        имя=выражение

        End Function

  Еслм параметр описания типа As тип не указан,то функция возвращает значение типа Variant.

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

  Функции, описанные в виде:

        Public Function имя ([параметры])

        …

        End Function

  трактуются как пользовательские функции.

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

  Способ  передачи параметров процедуре или  функции указывается при описании ее аргументов: имени аргумента может  предшествовать явный описатель  способа передачи. Описатель ByRef задает передачу по ссылке, a ByVal — по значению. Если же явное указание способа передачи параметра отсутствует, то по умолчанию подразумевается передача по ссылке.