Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Введение в Visual Basic for Applicрations.Стр 1 из 7Следующая ⇒
Введение в 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 основных типов данных:
Для описания переменных чаще всего используется инструкция 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; Нарушение авторского права страницы