Основы программирования

Офисное программирование - Процедуры и функции VBA
Индекс материала
Офисное программирование
Осноные седения о программироании на VBA
Определения
Обзор типов данных VBA
Переменные
Константы
Математические функции
Операторы и выражения
Логические операторы
Повторение действий: циклы
Объект UserForm
Использование форм
Задачи на закрепление материала
Массивы, процедуры, функции
Работа с различными типами данных
Функции работы со строками
Процедуры и функции VBA
Макросы
Создание VBA-программ
Элементы управления ComboBox, OptionButton и Frame
Элементы управления MultiPage, ScrollBar, SpinButton
Набор страниц MultiPage
Полоса прокрутки ScrollBar
Объект DataObject
Реализация технологии DragAndDrop
Программирование на VBA в Word
События объекта Document
Объекты Range и Selection
Работа с буфером
Форматирование документа
Создание кнопки или панели в Word
Автоматизация стандартных документов
Задачи на закрепление материала
Создание VBA-программ
Создание модуля Печать
Создание модулей работы кнопок
Особенности использования VBA в Excel
Метод AutoFilter
Метод Sort
Использование метода GoalSeek
Использование методов AutoFill
Математическая модель решения задачи
Разработка интерфейса пользователя
Финансовые функции
Построение диаграмм средстами VBA
Базы данных в Excel
Конструирование пользовательского интерфейса
Конструирование интерфейса. Презентация
Создание собственного головного меню
Добавление подменю
Добавление выпадающих меню
Все страницы

 

Описание процедур и функций VBA

 

Процедуры VBA бывают двух типов:

процедуры обработки событий;

общие процедуры.

Имя процедуры обработки события, связанного с элементом управления, состоит из имени элемента управления, символа подчеркивания и имени события, например Закрытъ_ click – процедура обработки нажатия кнопки Закрыть в форме.

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

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

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

Синтаксис процедуры-подпрограммы VBA:

 

Sub <имяПроцедуры> (<аргумент1>, <аргумент2>, …) <оператор1>

<оператор2>

End Sub

 

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

Объявление каждого аргумента имеет следующий синтаксис:

 

<имяАргумента> [As <типДанных> [=<значениеПоУмолчанию>]],

 

где <имяАргумента> – идентификатор, составленный согласно правилам создания имен и представляющий аргумент в теле процедуры;

<типДанных> – это либо встроенный тип данных, либо тип, определенный пользователем. Тип данных аргумента может не указываться, и тогда считается, что он имеет тип Variant. Аргументом процедуры может быть и массив. Тогда после имени аргумента должны стоять круглые скобки.

 

Для необязательного аргумента может быть указано <значение по умолчанию>, которое будет использоваться, если этот аргумент будет опущен. Если значение по умолчанию не указано, необязательный аргумент инициируется точно так же, как переменная, т. е. числовой аргумент – в 0, строковый – в строку нулевой длины и т. д.

Описание функции:

 

Function <имяФункции> (<аргумент1>, <аргумент2>, …) [As

<типЗначение>]

<оператор1>

<оператор2>

<имяФункции> = <возвращаемоеЗначение>

End Function

 

Кроме того что ключевое слово Sub заменяется на Function, в теле функции обязательно присутствует оператор присваивания имени функции какого-нибудь значения. Это значение и возвращается функцией. В заголовке функции может быть описан тип возвращаемого значения. Если этот тип не указан, функция возвращает значение Variant.

Рассмотрим два примера объявления подпрограмм и функций.

 

Объявление процедуры инициализации массива

 

Sub Init (arr() As Integer)

Dim i As Integer, str As String

For i * LBound(arr) To UBound(arr)

str = "Введите количество книг на полке № " & I

arr(i) = InputBox(str) 'функция ввода строки

Next I

End Sub

 

 

Объявление функции, подсчитывающей сумму любого числа аргументов

 

Function SummaVar(ParamArray varArg() As Variant) As Integer

Dim intSum As Integer, numb As Variant

For Each numb In varArg 'цикл по всем элементам массива

intSum = intSum + numb 'по умолчанию инициируется в 0

Next numb

SummaVar = intSum 'присвоение возвращаемого значения

End Function

 

 

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

 

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

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

Оператор вызова подпрограммы может использоваться в двух формах:

 

<имя Процедуры><список фактических параметров>

 

или

 

Call <имя Процедуры> (<список фактических параметров>).

 

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

Вызов функции имеет следующий вид:

 

<имя переменной>=<имя функции>(<список фактических параметров>).

 

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

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

 

Dim intShelfs (I To 30) As Integer

Dim intS As Integer

Init intShelfs инициируем массив intShelfs

intS = SummaVar(1,2,3,4,5,6,7,8,9)'суммируем целые числа

 

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

Процедуры и функция выполняют следующие действия:

1) первая процедура производит суммирование двух первых введенных значений a и b;

2) вторая процедура производит умножение третьего и четвертого введенных значений c и d;

3) функция вычисляет выражение a+b-c*d.

Технология выполнения

1. Откройте приложение Word, сохраните документ и перейдите в редактор VBA.

2. Создайте форму (рис. 30).

3. Пропишите обработчик события кнопки Счет.

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

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

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

 

 

Рис. 30. Форма примера 14 в режиме конструктора и в рабочем состоянии

 

Листинг примера 14

 

Dim a, b, c, d, k, m, h As Integer

Sub summ()

a = Val(TextBox1.Text)

b = Val(TextBox2.Text)

k = a + b

End Sub

Sub umn()

c = Val(TextBox3.Text)

d = Val(TextBox4.Text)

m = c * d

End Sub

Function prim() As Integer

Call summ

Call umn

prim = k – m

End Function

Private Sub CommandButton1_Click()

Call summ

Call umn

' переменные a и b являются глобальными для запуска функции prim, где k, m являются локальными переменными в соответствующих процедурах

h = prim(a, b)

Label8.Caption = «сумма a + b =» & k

Label9.Caption = «произведение c * d =» & m

Label10.Caption = "значение функции a+b-c*d= " & h

End Sub

 

4. Откомпилируйте программу.

5. Запустите форму на выполнение.

Пример 15. Создать программу, которая, используя данные, считанные из текстовых полей формы, выполняет вычисление значений двух выражений: y = sin(a + b ) + 5 и z = tg(c + + 3) – cos(3 * d ), где a, b, c, d – значения переменных, введенных в соответствующие текстовые поля (рис. 31). Данные значения y и z вычисляются в соответствующих процедурах (процедуре) или функциях. Основной блок программы сравнивает полученные значения, и об этом выдается сообщение на форму.

 

Рис. 31. Форма примера 15 в рабочем состоянии

 

Примечание. Для того чтобы определить, какое из двух чисел больше, необходимо из первого числа вычесть второе. Если разность больше нуля, то первое число больше второго (укажет, на сколько), если разность отрицательная, то второе число больше первого. При этом необходимо взять модуль от полученного значения, чтобы определить, на сколько второе число больше первого.

 



 
Ремонт пола - что и как выбирать - линолеум. Линолеум для жизни! Новейший. . Итальянская плитка Vallelunga: vallelunga jolie. Vallelunga со склада в Москве.