Вызов одной подпрограммы из другой 3 Передача данных при вызове программы 4 Передача данных по ссылке и по значению 4 Математические функции vba 5 icon

Вызов одной подпрограммы из другой 3 Передача данных при вызове программы 4 Передача данных по ссылке и по значению 4 Математические функции vba 5


Смотрите также:
Передача гидрографических данных, собранных в рамках мпг передача гидрографических данных...
Закон РФ n 3523-1...
Подпрограммы 31 Подпрограммы-функции 31 Подпрограммы-процедуры 31 Работа со строками 31 Работа с...
A. 2 O. Передача цифровых данных. Управление контроллером шагового двигателя по шине I...
Вопросы к государственному междисциплинарному...
Вопросы к государственному меж...
Definity 6
Определение коэффициента теплопроводности воздуха...
Доклад окончен...
Вопросы к государственному экзамену для специальности «Прикладная информатика в экономике»...
Положение об обработке и защите персональных данных Содержание стр. Общие положения...
Передача информации...



Загрузка...
скачать

А.А.Хамухин. Информатика для направления «Нефтегазовое дело». Лекция 9. Семестр 1

Логические операции в Excel и VBA. Процедуры и функции. Встроенные функции Excel и VBA


Содержание


Логические операции в Excel и VBA. Процедуры и функции. Встроенные функции Excel и VBA 1

Логические операции VBA 1

Процедуры и функции VBA 2

Вызов одной подпрограммы из другой 3

Передача данных при вызове программы 4

Передача данных по ссылке и по значению 4

Математические функции VBA 5



^

Логические операции VBA





Sub r()

Dim v As Boolean

v = 2 * 2 = 4

MsgBox v

End Sub



^ Sub r()

Dim v As Boolean

v = 2 * 2 = 5

MsgBox v

End Sub



^ Sub r()

Dim Z, A, B, c, d As Boolean

A = True

B = False

c = True

d = False

Z = (A Or Not B) Xor (c And d)

MsgBox Z

End Sub



^ Sub r()

Dim Z, A, B, c, d As Boolean

A = True

B = False

c = True

d = True

Z = (A Or Not B) Xor (c And d)

MsgBox Z

End Sub




Запись в математической форме:



Соответствующая ей запись в форме программы:


If (A = True Or Not B = True) Xor (C = True And D = True) Then Z = True

Worksheets(1).Cells(8, 10).Value = Z
^

Процедуры и функции VBA


До сих пор мы программировали в форме процедур (подпрограмм): которые начинаются со служебного слова Sub() с обязательным списком параметров, даже если он пустой и кончаются служебным словом End Sub. Кроме процедур допускается использование функций (Function)

Функции и подпрограммы имеют всего три основных отличия.

  • Функция начинается ключевым словом Function и заканчивается ключевыми словами End Function.

  • Функцию можно вызывать из формулы, введенной в ячейку.

  • Функция может возвращать значение в вызывающую программу или формулу.

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

      Sub Chap02dProc42_CallFunction()
      Dim Var1 As Integer
      Dim Var2 As Integer
      Dim Var3 As Integer
      Var1 = 5
      Var2 = 10
      Var3 = Multiply(Var1, Var2)
      MsgBox Var3 End Sub
      Function Multiply(ByVal Var1, ByVal Var2)
      Multiply = Var1 * Var2
      End Function

      Обратите внимание на строку 2 функции Multiply — в ней значение произведения двух чисел присваивается имени функции. Как раз через него вычисленное значение возвращается в вызывающую программу.

Примечание

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

      Function Multiply (ByVal Var1 As Integer,
      ByVal Var2 As Integer) As Integer

Если Вы не укажете тип функции и ее аргументов, им будет присвоен тип по умолчанию (Variant).

      Вы, вероятно, обратили внимание на любопытную особенность вызова функции Multiply в примере 42 — он указан в правой части оператора присваивания, в левой части которого помещена переменная Var3. При этом список аргументов — Var1 и Var2 — заключен в круглые скобки. Эти переменные передаются в функцию Multiply, а возвращаемое ею значение присваивается переменной Var3. Взгляните на предыдущие примеры: при вызове подпрограммы передаваемые в нее аргументы в скобки не заключаются. Запомните следующие основные правила передачи аргументов в подпрограммы и функции.

Правило 1

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

Правило 2

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

Правило 3

      Если функция вызывается сама по себе — не в составе выражения и без ключевого слова Call, — Вы не должны заключать список аргументов в круглые скобки.



^ Вызов функции из ячейки рабочего листа

      

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

      =Multiply(50,100)

Обратите внимание, что при вызове функции из ячейки вместо переменных в списке аргументов зачастую указывают адреса диапазонов. Функция воспринимает адреса как обычные аргументы, вычисляя связанные с ними значения:

      =Multiply(A1,B1)

Этот вызов возвращает произведение содержимого ячеек А1 и В1.
Excel вызовет функцию Multiply только при изменении содержимого ячеек А1 и В1. Чтобы изменить этот порядок и вызывать функцию при изменении любых ячеек рабочего листа, добавьте следующую инструкцию в начало функции:

      Function Multiply(ByVal Var1, ByVal Var2)
      Application.Volatile True
      Multiply = Var1 * Var2
      End Function

Вызвав метод Volatile объекта Application, Вы «помечаете» функцию как вычисляемую по правилам для встроенных функций Excel. Если метод Volatile не вызван (или вызван без ключевого слова True), функция Multiply вызывается только при изменении исходных данных (то есть содержимого ячеек А1 и В1).



^

Вызов одной подпрограммы из другой


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

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

  • Код VBA , разделенный на подпрограммы, обретает четкую логическую структуру; его легче разрабатывать, отлаживать и обслуживать.

В следующем примере, в программе РгосЗ6, для вывода на экран сообщения о вводе данных мы используем подпрограмму DisplayMessage.


Sub Chap02dProc36_CallSecondProc()

Dim Range1 As Range

Set Range1 = Worksheets(1).Range("A1")

Range1.Value = 500

DisplayMessage

End Sub

Sub DisplayMessage()

MsgBox "Data has been entered"

End Sub


Proc36 вводит данные в ячейку А1 первого рабочего листа и вызывает в строке 5 программу DisplayMessage, которая выводит на экран сообщение и возвращает управление РгосЗ6.
^

Передача данных при вызове программы



Вызывая подпрограмму, Вы вправе передать в нее переменные или значения. Эта возможность еще более расширяет область применения подпрограмм, позволяя выполнять одни и те же действия с различными исходными данными. Рассмотрим в качестве примера подпрограмму DisplayMessage. Сейчас она выводит сообщение «Data has been entered» (Были введены данные). Предположим, что кроме этого мы хотим знать, какое именно значение было введено, например «Было введено число 500». Проще всего передать в подпрограмму DisplayMessage аргумент (это можно сделать двумя способами; см. следующий пример). Как это сделать, показано в примере 37.


Sub Chap02dProc37_PassArgumentToProc()

Dim Range1 As Range

Set Range1 = Worksheets(1).Range("A1")

Range1.Value = 500

DisplayMessage2 Range1.Value

End Sub


Sub DisplayMessage2(Value1)

MsgBox "The value " & Value1 & " has been entered."

End Sub

Здесь есть два интересных момента. Во-первых, обращение к подпрограмме DisplayMessage2 в Ргос37 содержит аргумент Range1.Value. Во-вторых, в первой строке DisplayMessage2 в круглых скобках задано имя переменной Value1. Она принимает значение аргумента, указанного в вызове подпрограммы DisplayMessage2, и затем используется для вывода соответствующего значения в информационном окне.

^

Передача данных по ссылке и по значению



Передача аргументов из одной программы в другую осуществляется двумя способами — по ссылке (by reference) и по значению (by value). В первом случае передается сама переменная, поэтому ее значение в подпрограмме можно изменить. Во втором случае — только значение переменной, а не она сама, и изменить ее в вызванной подпрограмме нельзя.
      Выбор способа передачи осуществляется ключевыми словами ByRef и ByVal, которые в круглых скобках указываются в описании вызываемой подпрограммы.

Примечание

      При отсутствии в описании аргументов ключевых слов ByRef и ByVal передача осуществляется по ссылке.

      В программе Ргос39 переменная UserName передается в подпрограмму ChangeName по ссылке.

      Sub Chap02dProc39_PassArgumentByReference()
      Dim UserName As String
      UserName = Jeff
      ChangeName UserName
      MsgBox UserName
      End Sub

      Sub ChangeName(ByRef UserName)
      UserName = Dave
      End Sub

      В первой строке подпрограммы ChangeName в круглых скобках набраны ключевое слово ByRef и имя переменной UserName, указывая, что аргумент UserName будет передан в подпрограмму по ссылке. Это означает, что в подпрограмме используется сама переданная в нее переменная. В частности, в ChangeName переменной UserName присваивается новое значение "Dave", которое затем возвращается в Ргос39 и выводится на экран.

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

      Sub Chap02dProc41_PassArgumentByValue()
      Dim UserName As String
      UserName = "Jeff
      ChangeName3 UserName
      MsgBox Yet remains as " & UserName & " in the original proc."
      End Sub

      Sub ChangeName3(ByVal UserName)
      MsgBox "The original name is " & UserName & "."
      UserName = "Dave"
      MsgBox "The name is changed to " & UserName &
      " in the called proc."
      End Sub

      Исходное значение UserName передано в подпрограмму ChangeName3 и выведено на экран. Затем оно изменяется и снова выводится на экран во втором информационном окне. Поскольку аргумент был передан в ChangeName3 по значению, исходная переменная UserName после возвращения управления в Ргос41 не изменяется, о чем и свидетельствует окно, выводимое на экран в последней строке Ргос41.
^

Математические функции VBA



Abs(N) возвращает абсолютное значение аргумента

Atn(N) возвращает значение (в радианах) арктангенса аргумента

Cos(N) возвращает значение косинуса аргумента, заданного в радианах

Exp(N) возвращает значение экспоненты аргумента (число 2.718282…в степени N)

Fix(N) возвращает значение целой части аргумента, Fix(-8.4) даст -8

Int(N) аналогично Fix, но в сторону меньшего целого значения аргумента, Int(-8.4) даст -9

Log(N) возвращает значение натурального логарифма

Rnd(N) возвращает значение случайное число типа Single в диапазоне от 0 до 1

Для получения целого случайного число в диапазоне от lowerbound до upperbound использовать формулу:

Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

Sgn(N) возвращает значение 1 если N>0, 0 если N=0, -1 если N<0

Sin(N) возвращает значение синуса аргумента, заданного в радианах

Sqr(N) возвращает значение квадратного корня аргумента

Tan(N) возвращает значение тангенса аргумента, заданного в радианах

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









Скачать 74,18 Kb.
оставить комментарий
Дата16.10.2011
Размер74,18 Kb.
ТипДокументы, Образовательные материалы
Добавить документ в свой блог или на сайт

Ваша оценка этого документа будет первой.
Ваша оценка:
Разместите кнопку на своём сайте или блоге:
rudocs.exdat.com

Загрузка...
База данных защищена авторским правом ©exdat 2000-2017
При копировании материала укажите ссылку
обратиться к администрации
Анализ
Справочники
Сценарии
Рефераты
Курсовые работы
Авторефераты
Программы
Методички
Документы
Понятия

опубликовать
Загрузка...
Документы

наверх