Ирина Фризен - Офисное программирование
Эта функция имеет четыре аргумента:
<строкаПоиск> – искомая строка;
<включение> – параметр (булевское значение), который указывает, будут ли возвращаемые строки включать искомую подстроку или, наоборот, возвращаться будут только те строки массива, которые не содержат искомой строки в качестве подстроки;
<сравнение> – параметр, определяющий метод сравнения строк.
Еще три функции обеспечивают преобразование строк:
LCase(<строка>) – преобразует все символы строки к нижнему регистру, например функция LCase(«ПОЧTA») возвращает строку «почта»;
UCase(<строка>) – преобразует все символы строки к верхнему регистру;
StrConv(<строка>,<преобразование>) – выполняет несколько типов преобразований строки в зависимости от второго параметра. Этот параметр описывается встроенными константами, например функция StrConv(«poccия»,VbProperCase) возвращает значение «Россия».
И последние две функции генерируют строки символов:
Space(<число>) – создает строку, состоящую из указанного числа пробелов;
String(<число>,<символ>) – создает строку, состоящую из указанного в первом аргументе числа символов. Сам символ указывается во втором аргументе.
Пример 13. Создать программу, работающую со строковыми переменными. Для этого создать форму, в метки которой выходят следующие сообщения:
1 метка: сообщается длина строки, введенной в первое текстовое поле (1 строка);
2 метка: преобразует все символы третьего текстового поля (3 строка) в заглавные буквы;
3 метка: выводит вместе содержание первого и второго текстовых полей (1 и 2 строки).
Технология выполнения
1. Откройте приложение Word, сохраните документ и перейдите в редактор VBA.
2. Создайте форму аналогично приведенному рис. 29.
3. Пропишите обработчик события кнопки ОК.
Рис. 29. Форма примера 13 в режиме конструктора и в рабочем состоянии
Private Sub CommandButton1_Click()
Dim a As String
Dim b As String
Dim c As String
Dim k As String
Dim d As String
Dim n As Integer
a = TextBox1.Text
n = Len(a)
Label7.Caption = «длина первой строки равна» & n & « символам»
c = TextBox3.Text
k = Ucase(с)
Label8.Caption = k
b = TextBox2.Text
d = a + " " + b
Label9.Caption = d
End Sub
4. Откомпилируйте программу.
5. Запустите форму на выполнение.
3.3. Процедуры и функции 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. Пропишите обработчик события кнопки Счет.
При создании данной программы необходимо обратить внимание на следующие моменты. В начале программы создаются глобальные переменные, область видимости которых распространяется на все создаваемые процедуры, функцию и основной блок программы.