Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Введение в Visual Basic for Applicрations.



Введение в Visual Basic for Applicрations.

Структура программы. Типы данных.

 

Цель: Познакомиться с общей структурой программы на VBA, понятием процедуры и функции.

 

Visual Basic for Applications (VBA) - это инструмент разработки приложений. Подобно другим средствам программирования, VBA позволяет создать полностью автоматизированные программные продукты, которые можно использовать, например, для подготовки документов или анализа данных электронных таблиц. VBA - уникальное приложение, поскольку оно встраивается в другое приложение и расширяет его функциональные возможности.

При решении задач с помощью VBA требуется создать проект. Проекты VBA выполняются совместно с другими приложениями. Приложение, в котором разрабатывается и выполняется проект VBA, называется основным. В своей последующей работе в качестве основного приложения мы будем использовать Microsoft Excel.

Чтобы запустить редактор VBA, выберите в главном меню Excel команду Сервис/Макрос/Редактор Visual Basic или нажмите сочетание клавиш Alt+F11. Открывается окно приложения Microsoft Visual Basic.

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

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

 

Рис. 1.1

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

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

· Дважды щелкните в окне проекта по имени требуемого объекта приложения, который может содержать код;

· Дважды щелкните по требуемой форме или любому элементу управления в форме;

· Выберите команду Вставка/Модуль в меню редактора VBA.

Обратите внимание на два списка, расположенные под строкой заголовка окна модуля. В первом списке выводятся все объекты модуля, а во втором - список процедур, связанных с выбранным объектом. Код программы вводится непосредственно в окно модуля.

Программа на VBA - это набор процедур и функций, которые обеспечивают работоспособность системы. Их общая структура будет иметь такой вид:

Sub имя_процедуры ([аргументы])

Инструкции

End Sub

 

Ключевые слова Sub и End Sub используются в описании любой процедуры. Параметр имя_процедуры определяет имя создаваемой процедуры. Необязательные параметры аргументы позволяют передать в процедуру требуемые значения.

Синтаксис описания функций очень похож на синтаксис описания процедур, однако имеются некоторые отличия:

 

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

Инструкции

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

End Function

 

Внутри функции обычно имеется инструкция имя = выражение которая используется для задания возвращаемого значения. Обратите внимание, что имя функции стоит слева от знака равенства, параметр выражение определяет значение, которое должно быть совместимым с объявленным в параметре [As Тип] типом данных для функции.

Чтобы добавить процедуру или функцию в проект, выполните следующую последовательность действий:

1. Откройте окно модуля, в которое требуется добавить процедуру.

2. Выберите команду Вставка/Процедура. Выводится диалоговое окно Вставка процедуры, рис. 1.2.

3. Введите имя процедуры в поле Имя.

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

Рис. 1.2

5. Нажмите кнопку ОК. В окне модуля выводится пустая процедура с заданным именем.

Для запуска пользовательской процедуры (формы) установите курсор в любом месте процедуры (активизируйте форму), а затем выберите команду Запуск\Запуск подпрограммы/формы или нажмите клавишу F5. Также можно воспользоваться кнопкой Запуск подпрограммы\UserForm на панели инструментов.

VBA позволяет описать и использовать переменные различных типов. Выбор типа основывается на требованиях создаваемого приложения. В таблице приводятся параметры имеющихся в VBA основных типов данных:

 

Тип данных Диапазон
Byte от 0 до 255
Integer от -32768 до 32767
Long от -2147483648 до 2147483647
Currency от -922337203685477, 5808 до 922337203685477, 5807
Boolean True или False
Date с 1 января 100 года до 31 декабря 9999 года
String текстовые строки переменной длины

 

Для описания переменных чаще всего используется инструкция Dim, которая имеет синтаксис:

 

Dim имяПеременной [([ индексы])] [As тип]

 

Параметр имяПеременной - имя описываемой переменной. Необязательные скобки и параметр индексы используются для описания массивов. Дополнительный параметр As тип позволяет назначить переменной требуемый тип данных. Если тип не назначен, то переменной присваивается тип Variant. Переменные этого типа могут содержать данные любого типа, исключая строковые; во многих случаях имеется возможность преобразовать один тип данных в другой и объединить данные различных типов, например:

Dim BYear as Integer

Dim Message as Variant

Dim Age

BYear = InputBox(“Введите год рождления”)

Message = BYear & " год моего рождения"

Age = Year(Now) – Byear

Msgbox Message

Msgbox “Мой возраст ” Age “ лет”

При работе с числовыми переменными, мы можем использовать стандартные арифметические операции: " +" - сложение, " -" - вычитание, " *" - умножение, " /" - деление, " %" - процент от числа, " ^" - возведение в степень. Кроме того существует множество встроенных функций по работе с различными типами данных.

 

Практическое упражнение

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

Так, для примера, создадим программу, которая будет запрашивать у пользователя пароль доступа при попытке перехода на Лист1 рабочей книги.

В этом случае последовательность наших действий будет следующей:

1. Перейдите в редактор VBA и откройте окно проекта, если до этого оно было закрыто.

2. Выделите в окне проекта объект Лист1 и нажмите правую клавишу мыши. В контекстном меню выбираем пункт Программа. На экране активизируется окно модуля.

3. В левом верхнем списке этого окна выбираем объект Worksheet, в правом - событие Activate. Т. е. тем самым мы

определили, что данная программа выполнится в том случае, когда будет сделана попытка перейти на Лист1 рабочей книги. Окно модуля примет вид, как на рис. 1.3.

Рис. 1.3

4. Введем следующую программу:

Private Sub Worksheet_Activate()

Dim password As String

password = InputBox(" Введите пароль для доступа к листу" )

If password < > " nowhow" Then Sheets(" Лист2" ).Select

End Sub

Если теперь в приложении Microsoft Excel активизировать какой-либо рабочий лист, а затем вновь попробовать вернуться на Лист1, перед нами возникнет диалоговое окно, в которое мы должны будем ввести пароль. В случае неправильного ввода, активным становится Лист2.

Контрольные вопросы

1. Запуск редактора VBA, окно проекта, окно модуля.

2. Структура программы на VBA.

3. Синтаксис описания функций.

4. Добавление процедуры или функции в проект.

5. Запуск пользовательской процедуры или формы.

6. Типы переменных.

 

Инструкция Select Case

Инструкция Select Case используется для выполнения одной из нескольких групп инструкций в зависимости от значения условия. Синтаксис данной команды имеет вид:

 

Select Case выражение

[Case списокВыражений-n

[инструкции-n]]...

[Case Else

[инструкции_else]]

End Select

 

Параметр выражение - любое числовое или строковое выражение. Вместо вычисления логического условия выполняется сравнение значения выражения с каждой из величин, заданных параметром СписокВыражений-n. В инструкции может быть произвольное число блоков Case. Если ни одно из условий не является истинным, то выполняются инструкции блока Case Else.

Рассмотрим пример, в котором определяется тариф за минуту телефонных переговоров с некоторым городом:

 

 

Select Case StateOfResidence

Case " Прага"

SalesTax = 0.0525

Case " Киев"

SalesTax = 0.045

Case " Минск"

SalesTax = 0.065

Case Else

SalesTax = 0

End Select

 

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

Инструкция Select Case может также использоваться для проверки вхождения значения в заданное множество величин, например, для задания системы скидок:

 

Select Case UnitsOrdered

Case 1 To 10

Discount = 0

Case 11 To 19

Discount = 0.05

Case Is > = 20

Discount = 0.10

End Select

 

Обратите внимание, что выражение Case Is > = 20 позволяет обработать все значения переменной UnitsOrdered, которые больше 20. Если совпадений значений не обнаружено, то действий не производится, а управление передается команде, которая следует за инструкцией End Select.

Рассмотрим следующий пример:

 

AreaCode = " 914"

Select Case AreaCode

Case " 212", " 718"

City = " Нью Йорк"

Case " 312"

City = " Чикаго"

Case " 213"

City = " Париж"

End Select

 

В данном примере, если значение переменной City не равно ни одному из названий городов, то она остается неинициализированной или сохраняет значение, заданное ей ранее. Это может привести к логической ошибке. Поэтому рекомендуется на всякий случай указывать в инструкции Select Case блок Case Else.

Из простых логических условий можно составить сложные при помощи логических операций:

 

 

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

false AND false = false false OR true = true

false AND true = false true OR false = true

true AND false = false true OR true = true

true AND true = true NOT false = true

false OR false = false NOT true = false

Практическое упражнение

Напишем программу, которая по введенному названию месяца выводит количество дней в этом месяце, используя инструкцию Select Case.

1. Перейдите в редактор VBA и откройте окно проекта, если до этого оно было закрыто.

2. Отобразите окно модуля.

В окне модуля введите следующую процедуру:

Public Sub Месяцы()

Dim Month As String

Dim Day As String

Month = InputBox(" Введите название месяца" )

Select Case Month

Case " Январь", " Март", " Май", " Июль", _

" Август", " Октябрь", " Декабрь"

Day = " 31"

Case " Апрель", " Июнь", " Сентябрь", " Ноябрь"

Day = " 30"

Case " Февраль"

Day = " 28 или 29"

Case Else

Day = " Ошибка ввода"

End Select

MsgBox Month & " - " & Day

End Sub

Знак подчеркивания ( _ ) в тексте программы используется тогда, когда строка программы выходит за пределы экрана, для упрощения восприятия текста.

Контрольные вопросы

1. Правила записи инструкции If…Then…Else. Многострочная структура

2. Правила записи инструкции Select Case, параметры.

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

4. Инструкция безусловного перехода.

5. Правила записи инструкции

Операторы цикла

Безусловный выход из цикла

 

Цикл можно выполнить произвольное число раз, либо ни одного. Инструкция Exit Do позволяет безусловно передать управление команде, которая следует за последней командой цикла.

 

Counter = 99

Do Until Counter < = 0

If Counter > 50 Then

MsgBox " Начальное значение больше допустимого"

Exit Do

End If

Call MySubroutine

Counter = Counter - 2

Loop

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

Цикл While…Wend

 

Инструкция While…Wend является разновидностью инструкции Do…Loop. В ранних версиях Basic, в которых не было инструкции Do…Loop, весьма эффективно использовалась команда While…Wend. Формат инструкции прост:

 

While [условие]

инструкции

Wend

Первый пример для инструкции Do…Loop можно с легкостью изменить, чтобы использовать цикл While…Wend:

 

Counter = 100

While Counter > 0

Call MySub

Counter = Counter - 1

Wend

 

Инструкция While…Wend в отличие от цикла Do…Loop не имеет второго варианта, в котором проверка условия выполняется в конце цикла. Кроме того, для данного цикла нет инструкции для безусловного выхода, подобной Exit Do.

Цикл For…Next

 

Инструкцию For…Next можно встретить в большинстве языков программирования. Она позволяет циклически выполнить набор утверждений заданное число раз. Формат инструкции следующий:

For счетчик = начало To конец [Step шаг]

[инструкции]

Next счетчик

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

 

Sub Дни_недели()

For i = 1 To 8

Select Case i

Case 1

День = " Понедельник"

Case 2

День = " Вторник"

Case 3

День = " Среда"

Case 4

День = " Четверг"

Case 5

День = " Пятница"

Case 6

День = " Суббота"

Case 7

День = " Воскресенье"

Case Else

День = " Нет вариантов"

End Select

MsgBox (День)

Next i

End Sub

 

Обратите внимание, что переменная i автоматически увеличивается по достижении конца цикла. Ее не требуется изменять отдельной командой. Применяемый по умолчанию шаг равный 1, можно изменить, указав необязательное ключевое слово Step и величину шага. Значение шага может быть как положительным, так и отрицательным, что позволяет также создать циклы для счета в обратном направлении.

 

Практическое упражнение

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

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

Чтобы выполнить эту задачу, нам придется воспользоваться несколькими новыми функциями:

Rnd() - генерация случайного числа в диапазоне [0; 1);

Int(число) - целая часть числа;

Chr(13) - перевод строки (аналогично нажатию клавиши Enter).

 

1. Перейдите в редактор VBA и откройте окно проекта, если до этого оно было закрыто.

2. Отобразите окно модуля.

3. В окне модуля введите следующую процедуру:

Public Sub Выбрасывание_кости()

Dim numbers(6) As Double

Dim a As Double

N = InputBox(" Введите число выбрасываний кости" )

For i = 1 To N

a = Int(Rnd() * 6) + 1

numbers(a) = numbers(a) + 1

Next i

info = " Число выбрасываний" & Chr(13) & Chr(13) & _

" 1 - " & numbers(1) & _

" 4 - " & numbers(4) & Chr(13) & _

" 2 - " & numbers(2) & _

" 5 - " & numbers(5) & Chr(13) & _

" 3 - " & numbers(3) & _

" 6 - " & numbers(6)

MsgBox (info)

End Sub

Контрольные вопросы

 

1. Цикл Do…Loop. Варианты синтаксиса.

2. Прерывание пользователем работы макроса.

3. Безусловный выход из цикла.

4. Цикл While…Wend.

5. Цикл For…Next.

Массивы. Задание собственных типов данных

 

Многомерные массивы

В VBA можно создавать многомерные массивы. Чтобы описать, например, двумерный массив, необходимо задать в инструкции Dim два параметра индекс. Приведем инструкцию, которая описывает таблицу из 10 строк и 15 столбцов:

 

Dim Location (9, 14) As Integer

 

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

Элементы многомерных массивов получают значения и используются практически так же, как элементы одномерных:

 

Location (8, 7) = 259

Amount = Location (8, 7)

MsgBox (Amount)

 

Задание собственных типов данных

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

Синтаксис инструкции Type выглядит следующим образом:

 

[Private | Public] Type имяПеременной

имяЭлемента [([индексы])] As тип

[имяЭлемента [([индексы])] As тип]

End Type

 

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

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

 

Type Employee

FirstName As String * 15

LastName As String *15

Phone As String * 13

Salary As Single

DateHired As Date

End Type

После описания нового типа требуется явно объявить одну или несколько переменных этого типа. Чтобы описать переменную, подставьте в инструкции Dim имя заданного типа в качестве параметра тип, например:

 

Dim NewEmployee As Employee

 

Теперь после описания переменной можно присвоить значения ее элементам и использовать эти значения. Для доступа к значениям требуется указать название переменной, точку, а затем имя элемента, например:

 

NewEmployee.FirstName = " Иван"

NewEmployee.LastName = " Петров"

NewEmployee.Phone = " (212)555-1232"

NewEmployee.Salary = 350

NewEmployee.DateHired = Date

 

Для использования переменной NewEmployee:

FullName = NewEmployee.FirstName & " " & _ NewEmployee.LastName

Теперь объединим приведенные примеры:

 

Type Employee

FirstName As String * 15

LastName As String *15

Phone As String * 13

Salary As Single

DateHired As Date

End Type

Sub Sample

NewEmployee.FirstName = " Иван"

NewEmployee.LastName = " Петров"

NewEmployee.Phone = " (212)555-1232"

NewEmployee.Salary = 350

NewEmployee.DateHired = Date

FullName = NewEmployee.FirstName & " " & _ NewEmployee.LastName

End Sub

 

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

 

Dim AllEmployees (9) As Employee

 

AllEmployees (0).FirstName = " Иван"

AllEmployees (0).LastName = " Петров"

 

Область определения и время жизни переменных

 

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

Область определения переменной определяет, где можно использовать переменную. В VBA имеется три уровня области определения:

1. Переменные уровня процедуры (личные переменные) используются только в процедуре, в которой они описаны.

2. Переменные уровня модуля используются только в процедурах модуля, в котором они описаны, но не в других модулях проекта.

3. Общие переменные используются во всех процедурах любого модуля данного проекта.

Область определения переменной определяется тем, где и как описать переменную:

· Личная переменная описывается с помощью инструкции Dim, размещенной в процедуре.

· Переменная уровня модуля описывается с помощью инструкции Dim, размещенной в разделе описаний модуля.

· Общая переменная описывается с помощью инструкции Public, а не инструкции Dim, в разделе описаний модуля:

Public UserName As String

 

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

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

 

Static Counter As Integer

 

В этом случае переменная Counter сохраняет свое значение, пока выполняются другие процедуры.

Проиллюстрируем сказанное на примерах процедур. Введите нижеприведенный код в окне модуля и запустите на выполнение процедуру CallingMacro.

 

Dim Counter As Integer

Sub CallingMacro()

CounterMacro

BadCounterMacro

Debug.Print " Counter = " & Counter

End Sub

 

Sub CounterMacro()

Static MyCounter As Integer

Counter = Counter + 1

MyCounter = MyCounter + 1

Debug.Print " CounterMacro: Counter = " & Counter

Debug.Print " CounterMacro: MyCounter = " & MyCounter

End Sub

 

Sub BadCounterMacro()

Dim MyCounter As Integer

Counter = Counter + 1

MyCounter = MyCounter + 1

Debug.Print " BadCounterMacro: Counter = " & Counter

Debug.Print " BadCounterMacro: MyCounter = " & MyCounter

End Sub

 

В приведенных процедурах имеются три переменных:

- переменная Counter - переменная уровня модуля, поэтому она доступна во всех процедурах модуля. При каждом вызове процедуры CounterMacro или BadCounterMacro переменная Counter увеличивается на единицу.

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

- другая переменная с именем MyCounter описана как личная переменная процедуры BadCounterMacro, без использования инструкции Static. Поэтому она повторно инициализируется значением 0 при каждом вызове процедуры.

Теперь посмотрим на результаты выполнения макроса CallingMacro в окне отладки ( Вид/Окно отладки ), если запустить его дважды:

 

CounterMacro: Counter = 1

CounterMacro: MyCounter = 1

BadCounterMacro: Counter = 2

BadCounterMacro: MyCounter = 1

Counter = 2

CounterMacro: Counter = 3

CounterMacro: MyCounter = 2

BadCounterMacro: Counter = 4

BadCounterMacro: MyCounter = 1

Counter = 4

 

Очевидно, что переменная уровня модуля Counter увеличивается на единицу при вызове каждой из процедур. Переменная MyCounter процедуры CounterMacro также непрерывно увеличивается на единицу при входе в процедуру, а переменная MyCounter процедуры BadCounterMacro каждый раз инициализируется значением 0 и увеличивается только до 1.

Практическое упражнение

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

 

Type Record

Fio As String

Telephone As String

End Type

 

Public Sub Номер_телефона()

Dim People(20) As Record

Do

num = InputBox(" Введите количество записей в массиве" )

If num > 20 Then MsgBox (" Слишком большое число" )

Loop Until num < = 20

For i = 1 To num

People(i).Fio = InputBox(" Фамилия, Имя, Отчество" )

People(i).Telephone = InputBox(" Номер телефона " & People(i).Fio)

Next i

Do

Fio = InputBox(" Введите Ф.И.О. по которому необходимо определить номер телефона, для выхода - exit" )

For i = 1 To num

If People(i).Fio = Fio Then MsgBox (Fio & ": " & People(i).Telephone)

Next i

Loop While Fio < > " exit"

End Sub

 

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

 

Контрольные вопросы

1. Понятие массива. Индекс массива.

2. Описание массива. Многомерные массивы.

3. Задание собственных типов данных при помощи инструкции Type.

4. Область определения и время жизни переменных.

¨ Личная переменная;

¨ Переменная уровня модуля;

¨ Общая переменная.

5. Статитеческая переменная.

Рис. 5.1

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

Установить значение свойства объекта, а так же получить его можно и программным путем. Синтаксис команд в этом случае выглядит так:

 

имяОбъекта.свойство = имяПеременной

имяПеременной = имяОбъекта.свойство

Создание форм

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

В VBA формы можно создать самостоятельно. Форма - это то же самое, что и любое диалоговое окно в Windows 98 (NT). Единственное различие заключается в том, что имеется возможность задать внешний вид такого окна, а так же указать, для чего оно предназначено.

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

1. Если одновременно открыто несколько проектов, выберите имя проекта, в который требуется добавить форму, в окне проекта.

2. Выберите команду главного меню Вставка/UserForm. Выводится пустая форма и панель элементов управления.

3. В меню редактора VBA выберите команду Вид/Окно свойств. Выводится окно свойств.

4. Задайте свойства новой формы, например, ее имя (свойство Name).

Панель элементов управления позволяет разместить ряд элементов управления в форме. Хотя набор инструментов отображается автоматически при создании формы, может понадобиться скрыть его, чтобы освободить место на экране. Для вывода панели элементов выберите команду Вид/Панель элементов. Если вы выполните всю приведенную выше последовательность действий, окно VBA будет иметь вид, как на рис. 5.2.

 

Рис. 5.2

3. Перетащите элемент управления в требуемую позицию.

4. Измените размеры элемента управления, перетащив его рамку. То же самое можно сделать и с формой.

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

После создания элемента управления лучше сразу присвоить ему новое имя (свойство Name). Если не указать название поля, то используется имя, заданное по умолчанию.

Для установки и получения содержимого поля используется свойство Value. Данное свойство имеет тип Variant. Приведем фрагмент, в котором в поле TxtControl заносится значение " abcdef":

 

TxtControl.Value = " abcdef"

 

В следующем фрагменте в поле заносится число 100:

 

TxtControl.Text = 100

 

Для получения значения элемента управления TextBox можно использовать следующий фрагмент:

 

Dim varResult As Variant

varResult = txtControl.Value

 

Использование надписей. Элемент управления Label (Надпись) используется для вывода текста в форме. Наиболее важным свойством является Caption, содержащее текст надписи. Свойство Caption можно задать в окне свойств, а так же в тексте программы:

 

labControl.Caption = " Адрес"

 

Использование кнопок. Элемент управления CommandButton (Кнопка) инициирует выполнение некоторого действия. С помощью свойства Caption имеется возможность задать текст, который выводится на кнопке.

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

 

Использование переключателей. Элемент управления OptionButton (Переключатель) используется для предоставления выбора одного варианта из многих. На заданный момент в группе может быть выбран только один переключатель. Отмена выбора одного переключателя при выборе другого происходит автоматически.

Для определения выбранного переключателя используется свойство Value. Если значение данного свойства равно True, значит данный переключатель включен, если False - значит выключен.

 

Кроме перечисленных, существуют и другие элементы управления. Исчерпывающую информацию по ним можно получить в справочной системе по VBA.

После размещения, выравнивания и задания размеров и свойств элементов управления форма выглядит весьма привлекательно. Однако это не имеет значения, если с элементами управления не связано никакого кода.

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

· Запуск выполнения определенной задачи при нажатии кнопки;

· Запоминание выделенного элемента в списке;

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

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

· Дважды щелкните по элементу управления в форме. Появляется окно модуля для выбранного объекта. Выберите событие, для которого требуется создать процедуру обработки, в списке, расположенном в верхнем правом углу окна модуля. Введите текст процедуры. Для перехода к другому объекту выберите этот элемент управления в списке, расположенном в верхнем левом углу окна модуля.

· Щелкните по элементу управления и выберите команду Вид/Программа в меню редактора VBA.

Часто при разработке формы требуется посмотреть на ее внешний вид. По мере разработки формы, ее можно просматривать. Для этого необходимо открыть форму и либо нажать клавишу < F5>, либо воспользоваться командой Запуск\Запуск подпрограммы/ формы.

 

Практическое упражнение

 

Создадим экранную форму Калькулятор, которая могла бы производить основные арифметические действия. Окончательный вид нашей разработки показан на рис. 5.3.

Для выполнения этого задания, выполните последовательно следующие этапы:

1. Перейдите в редактор VBA и откройте окно проекта, если до этого оно было закрыто.

 

Рис. 5.3

2. Добавьте в проект новую форму. Присвойте свойству Name и Caption данного объекта значение " Калькулятор".

3. Добавьте в форму три поля ввода (TextBox) и расположите их как показано на рис. 5.3. Присвойте им соответственно следующие имена: " txt1", " txt2" и " txtResult". Установите для этих объектов следующие значения свойств:

txt1 Value = 0

txt2 Value = 0

txtResult Value = 0

Enabled = False

4. Добавьте в форму четыре переключателя (OptionButton). Установите для этих объектов следующие значения свойств:

OptionButton1 Name = Сложение

Caption = " + "

Value = True

OptionButton2 Name = Вычитание

Caption = " - "

OptionButton3 Name = Деление

Caption = " / "

OptionButton4 Name = Умножение

Caption = " * "

5. Добавьте в форму кнопку (CommandButton) и установите для нее значения следующих свойств:

CommandButton Name = Выход

Caption = Выход

При нажатии данной кнопки будет осуществляться выход из нашего Калькулятора. Для этого нам необходимо связать некоторый код с событием Click этого объекта. Щелкните два раза на этой кнопке левой клавишей мыши и в открывшимся окне модуля введите следующую процедуру:

 

Private Sub Выход_Click()

Калькулятор.Hide

End Sub

 

6. Добавьте в форму кнопку (CommandButton) и установите для нее значения следующих свойств:

CommandButton Name = Вычислить

Caption = Вычислить

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

 

Private Sub Вычислить_Click()

Dim x As Variant

Dim y As Variant

Dim z As Variant

x = CDbl(txt1.Value)

y = CDbl(txt2.Value)

If Сложение.Value = True Then z = x + y

If Вычитание.Value = True Then z = x - y

If Умножение.Value = True Then z = x * y

If Деление.Value = True Then

If y = 0 Then

z = 0

MsgBox (" Деление на ноль!!! " )

Else

z = x / y

End If

End If

txtResult.Value = CStr(z)

End Sub

 

7. Добавьте в форму надписи (Label), в соответствии с рисунком 5.3.

В принципе, мы уже выполнили нашу цель. Можете теперь запустить эту форму на выполнение и поэкспериментировать. Однако, при работе в Excel, было бы очень неудобно каждый раз, когда нам нужно воспользоваться калькулятором, запускать редактор VBA. Гораздо проще было бы, если бы на рабочем листе Excel была кнопка, при нажатии на которую активизировалась бы наша форма.

Для этого выполните следующую последовательность действий:

1. Закройте окно редактирования формы и создайте модуль (команда главного меню Вставка/Модуль ).

2. В открывшемся окне модуля введите следующий фрагмент кода:

Sub RunForm()

Калькулятор.Show

End Sub

 

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

4. При добавлении любого элемента управления на лист рабочей книги, нам необходимо воспользоваться панелью инструментов Формы. Чтобы вывести ее на экран, выберите в главном меню команду Вид/Панели инструментов/Формы.

5. Добавьте на рабочий лист элемент управления Кнопка. При этом автоматически активизируется окно Назначить макрос объекту. Т. е. мы должны указать, какая выполнится подпрограмма, при нажатии на данную кнопку. Выбираем из списка макрос RunForm и нажимаем клавишу ОК.

6. Закроем панель инструментов Формы.

Теперь, когда возникнет необходимость выполнить какие-либо расчеты, мы просто нажмем кнопку на рабочем листе Excel.

 

Контрольные вопросы

 

1. Понятие объекта. Свойства объекта.

2. Окно свойств объекта.

3. Создание форм.

4. Размещение элементов управления в форме.

5. Использование надписей, полей, кнопок, переключателей.


Поделиться:



Последнее изменение этой страницы: 2017-05-05; Просмотров: 506; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.303 с.)
Главная | Случайная страница | Обратная связь