Содержание 1 введение 6

Вид материалаРеферат
6.2 Синтаксис процедур и функций
Main с нулевым списком параметров и процедуру Product
Function SQ(x1 As Single, y1 As Single, x2 As Single, y2 As Single, _
7 Диалоговый ввод/вывод информации
Функция InputBox
InputBox (сообщение[,заголовок][,текст_по_умолчанию]
OK или клавишу ENTER
MsgBox (сообщение[,кнопки][,заголовок]
Нажатая кнопка
MsgBox. Public Sub WinMsg()
Подобный материал:
1   ...   7   8   9   10   11   12   13   14   ...   25

6.2 Синтаксис процедур и функций



Описание процедуры Sub в VBA имеет следующий вид:

[Private | Public | Static] Sub имя ([список-аргументов])

тело-процедуры

End Sub

Ключевое слово Public в заголовке процедуры используется, чтобы объявить процедуру общедоступной, т.е. разрешить вызывать ее из всех других процедур всех модулей всех проектов. Если модуль, в котором описана процедура, содержит закрывающий оператор Option Private, то процедура доступна лишь модулям своего проекта. Альтернативный ключ Private используется, чтобы закрыть процедуру от всех модулей, кроме того, в котором она описана. По умолчанию процедура считается общедоступной.

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

Параметр имя это имя процедуры, удовлетворяющее стандартным условиям VBA на имена переменных.

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

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


, где .


Для решения данной задачи создадим две процедуры: процедуру Main с нулевым списком параметров и процедуру Product, которая имеет три параметра.


Private Sub Main()

Dim f(4), f1(4), s, p2, p1 As Single

Dim i As Integer

For i = 1 To 4

f(i) = Val(InputBox("Введите f"))

f1(i) = Sin(f(i))

Next

Product 4, f, p1

Call Product(3, f1, p2)

s = p1 + p2

Debug.Print "Сумма произведений равна "; s

End Sub

Sub Product(ByVal k As Integer, ByVal z, p)

Dim i As Integer

p = 1

For i = 1 To k

p = p * z(i)

Next

End Sub


Здесь после ввода в память значений элементов массивов f и f1 дважды вызывается процедура Product. Обратите внимание на различный синтаксис вызова процедуры. При использовании ключевого слова Call список параметров должен быть заключен в скобки. Ключевое слово ByVal определяет список входных параметров, в данном примере это параметры k, z. Параметр p в данном примере является выходным, следовательно, вычисленное значение произведения передается через этот параметр в точку вызова процедуры.

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

[Private | Public | Static] Function имя ([список-аргументов]) _

As типЗначения

тело-функции

End Function


Рассмотрим в качестве примера определение функции SQ, которая возвращает значение площади треугольника, если заданы декартовы координаты трех вершин. Очевидно, что у данной функции 6 аргументов – 3 пары координат вершин.


Function SQ(x1 As Single, y1 As Single, x2 As Single, y2 As Single, _

x3 As Single, y3 As Single) As Double

SQ = Abs((x1 * (y3 - y2) + x2 * (y1 - y3) + x3 * (y2 - y1)) / 2)

SQ = CInt(SQ * 100) / 100

End Function


Private Sub Main()

Dim s As Double

s= SQ(2.7, 9.1, 14.1, 16.4, 17.9, 2)

Debug.Print "Площадь треугольника равна "; s

End Sub


Обратите внимание, что в заголовке функции указаны не только тип аргументов, но тип значения самой функции. Другой особенностью описания функции является то, что результат работы операторов, стоящих в теле функции, присваивается имени функции: SQ = CInt(SQ * 100) / 100.


7 Диалоговый ввод/вывод информации



При разработке любой программы требуется организовать обмен информацией между пользователем и программой. Эта задача решается с помощью функций InputBox и MsgBox.

Функция InputBox

Функция InputBox выводит на экран диалоговое окно, содержащее сообщение и поле ввода, устанавливает режим ожидания ввода текста пользователем или нажатия кнопки, а затем возвращает значение типа String, содержащее текст, введенный в поле.

InputBox (сообщение[,заголовок][,текст_по_умолчанию]

Сообщение – текст в диалоговом окне. Максимальная длина сообщения 1024 символа. Для разделения строк используется символ возврата каретки (Chr(13)), символ перевода строки (Chr(10)) или комбинация этих символов (Chr(13)&Chr(10)).

Заголовок – строковое выражение, отображаемое в строке заголовка диалогового окна. Если аргумент опущен, в строку заголовка помещается имя приложения.

Текст_по_умолчанию – строковое выражение, отображаемое в поле ввода. Если аргумент опущен, поле ввода отображается пустым.

Если пользователь нажимает кнопку OK или клавишу ENTER, функция возвращает содержимое поля ввода. Если пользователь нажмет кнопку Отмена, функция вернет пустую строку ("").

Рассмотрим на примере использование функции InputBox. Результат работы функции отображен на рис 7.1.



Рис. 7.1  Диалоговое окно функции InputBox

Dim MyValue

MyValue = InputBox("Введите число от 0 до 3","Пример","1")

Функция MsgBox

Функция MsgBox выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа Integer, указывающее, какая кнопка была нажата.

MsgBox (сообщение[,кнопки][,заголовок]

Сообщение – текст в диалоговом окне. Максимальная длина сообщения 1024 символа. Для разделения строк используется символ возврата каретки (Chr(13)), символ перевода строки (Chr(10)) или комбинация этих символов (Chr(13)&Chr(10)).

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

Заголовок – строковое выражение, отображаемое в строке заголовка диалогового окна. Если аргумент опущен, в строку заголовка помещается имя приложения.

Значения аргумента кнопки приведены в таблице 7.1.


Таблица 7.1  Значение аргумента кнопки










Константа

Числовое значение

Реакция

vbOKOnly

0

Отображается только кнопка ОК

vbOKCancel

1

Отображаются кнопки ОК, Отмена

vbAbortRetryIgnore

2

Отображаются кнопки Прервать, Повторить, Пропустить

vbYesNoCancel

3

Отображаются кнопки Да, Нет, Отмена

vbYesNo

4

Отображаются кнопки Да, Нет

vbRetryCancel

5

Отображаются кнопки Повторить, Отмена

vbCritical

16

Используется значок Критическое сообщение

vbQuestion

32

Используется значок, предупреждающий запрос

v
Продолжение табл. 7.1
bExclamation

48

Используется значок Предупреждение

vbInformation

64

Используется значок Информационное сообщение

vbDefaultButton1

0

Основной является первая кнопка

vbDefaultButton2

256

Основной является вторая кнопка

vbDefaultButton3

512

Основной является третья кнопка

vbDefaultButton4

768

Основной является четвертая кнопка

vbApplicationModal

0

Модальное окно на уровне приложения: чтобы продолжить работу с текущим приложением, необходимо ответить на данное сообщение

vbSystemModal

4096

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


В таблице определены три группы значений:
  1. значения от 0 до 5;
  2. значения 16, 32, 48, 64;
  3. значения 0, 256, 512;
  4. значения 0, 4096.

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

Как отмечалось ранее, функция MsgBox возвращает числовое значение, определяющее выбор пользователя. В таблице 7.2 приведены коды возврата функции.


Таблица 7.2  Возвращаемые значения функции MsgBox

Константа

Значение

Нажатая кнопка

vbOK

1

ОК

vbCancel

2

Отмена

vbAbort

3

Прервать

vbRetry

4

Повторить

vbIgnore

5

Пропустить

vbYes

6

Да

vbNo

7

Нет

Приведем пример использования функции MsgBox.

Public Sub WinMsg()

Dim Msg, Style, Title, Response, MyString

Msg = "Обнаружена ошибка. Продолжить?"

Style = vbYesNo + vbCritical + vbdDefoultBotton2

Title = "Пример"

Response = MsgBox(Msg, Style, Title)

If Response = vbYes Then

MyString = " Нажата кнопка Да"

Else

MyString = " Нажата кнопка Нет"

End If

MsgBox MyString

End Sub


Результат работы данной процедуры отображен на рис.7.2, 7.3





Рис. 7.2  Окно с сообщением Рис.7.3  Сообщение

о нажатой кнопке