Главная страница

Практикум по Visual Basic for Applications. 3 Глава Алгоритмы и программы Понятие алгоритма


Скачать 1.74 Mb.
НазваниеПрактикум по Visual Basic for Applications. 3 Глава Алгоритмы и программы Понятие алгоритма
АнкорVBA.pdf
Дата23.09.2017
Размер1.74 Mb.
Формат файлаpdf
Имя файлаVBA.pdf
ТипПрактикум
#8936
страница3 из 8
1   2   3   4   5   6   7   8
Глава 2. Введение в разработку приложений
Приложение – это программа или комплекс программ специального на- значения, решающие класс задач какого-либо направления. Например, прило- жение Microsoft Word обрабатывает документы (иллюстрированные тексты), приложение Excel решает задачи, связанные с табличными вычислениями, при- ложение Paint позволяет создавать рисунки, обрабатывать графические изобра- жения. Можно написать программу-приложение, вычисляющее, например, прибыль предприятия по заданным исходным экономическим показателям и т.п.
Важной частью разработки приложения является создание сервисных средств, обслуживающих диалог с пользователем приложения. Чаще всего та- кими средствами являются разнообразные формы – специальные окна, снаб- женные специальными элементами управления – кнопками, меню, полями вво- да, переключателями, вкладками для удобного ввода исходных данных и выво- да – визуализации результатов. Все языки программирования с приставкой
«Visual» предоставляют для разработчиков приложений инструменты для соз- дания таких форм, используя готовые «строительные блоки».

31
2.1. Объекты, свойства, методы, события в VBA
Одним из основных понятий VBA является объект. В VBA имеется более
100 встроенных объектов (рабочие книги (WorkBook), рабочие листы (Work-
Sheet), рабочие ячейки (Cell), формы (UserForm), элементы управления
(TextBox, CommandButton, Label и др.), диалоги и т. д.). Объектом можно управлять с помощью программы на языке VBA. Каждый объект обладает не- которыми характеристиками, или свойствами. Например, диалог может быть видимым или невидимым в данный момент на экране. Можно узнать текущее состояние диалога с помощью свойства Visible. Шрифт и его тип, размер, цвет и т. д. также определяют различные свойства объекта, например содержи- мого ячейки. Изменяя свойства, можно менять характеристики объекта.
Таким образом, свойство представляет собой атрибут объекта, опреде- ляющий его характеристики, такие, как размер, цвет, положение на экране и со- стояние объекта, например доступность или видимость.
Синтаксис применения свойства:
Объект.Свойство
Объект содержит также список методов, которые к нему могут быть при- менены. Например, показать диалог (форму) на экране или убрать его можно с помощью методов Show и Hide соответственно.
Таким образом, метод представляет собой действие, выполняемое над объектом.
Синтаксис применения метода:
Объект.Метод
Из вышесказанного можно сделать вывод, что объект – это программный элемент, который имеет свое отображение на экране, содержит некоторые пе- ременные, определяющие его свойства, и некоторые методы для управления объектом. Наиболее часто в VBA используются следующие встроенные объек- ты:
Range
Диапазон ячеек (может включать только одну ячейку)
Cells
Ячейка
Sheet
Лист
Worksheet
Рабочий лист
DialogSheet Диалоговое окно
Большинство объектов принадлежит к группе подобных объектов. Эти группы называются семействами. Например, все рабочие листы рабочей книги образуют семейство, называемое Worksheets. Семейства можно использовать одним из двух способов: либо какое-либо действие совершается над всеми объ-

32 ектами семейства, (например, удалить – Delete), либо со ссылкой на семейст- во выбирается конкретный объект для работы с ним. Например, инструкция
Worksheets (''Первый'') выбирает рабочий лист «Первый» из активной рабочей книги. Другими приме- рами семейств являются:
Sheets
Листы
DialogSheets Диалоговые окна
DrawingObjects Графические объекты
Изменяя свойства, можно изменять характеристики объекта или семейства объектов. Установка значений свойств - это один из способов управления объ- ектами. Для установки свойства необходимо ввести имя объекта, затем поста- вить точку и за ней – имя свойства. Далее должен следовать знак равенства и значение свойства. Синтаксис установки значения свойства объекта выглядит следующим образом:
Объект.Свойство = Выражение
В приведенном ниже примере для свойства Value диапазона ячеек Ис- ходные_данные устанавливается значение 0,1 (т.е. в ячейках этого диапазона будет записано число 0.1):
Range(''Исходные данные'').Value = 0.1
Обратите внимание, что в MS Excel в представлении числа «0,1» использу- ется запятая («, »), а в VBA - точка («.»).
В следующем примере в ячейку А2 вставляется формула путем изменения свойства Formula (Формула):
Range(''A2'').Formula= ''СУММ(А1:С1)''
Некоторые свойства являются неизменяемыми, т. е. допустимыми только для чтения. Иными словами, значение свойства можно узнать, но нельзя изме- нить. Например, для диапазона, состоящего из одной ячейки, свойства Row
(Строка) и Column (Столбец) являются неизменяемыми. Другими словами, можно узнать, к какой строке и в каком столбце находится ячейка, но изменить ее положение путем изменения этих свойств нельзя. Для извлечения значения свойств объекта используется следующая конструкция:
Переменная = Объект.Свойство
В следующем примере переменной Процентная_ставка присваивается зна- чение из ячейки А1 текущего рабочего листа:
Процентная_ставка = Range(''Al'').Value

33
или
Процентная_ставка = Cells(1, 1).Value
Кроме свойств, как уже отмечалось выше, у объектов есть ряд методов, т. е. команд, применяемых к объекту. Например, у объекта – диапазон ячеек – имеется метод Clear, позволяющий очистить содержимое диапазона. Приво- димый ниже пример показывает, как можно очистить диапазон Исход- ные__данные:
Range(''Исходные данные'').Clear
В примере
Range(''А10:В12'').Select
выбирается диапазон ячеек А10:В12.
В Excel имеется много объектов, причем некоторые из них содержат дру- гие объекты. Например, рабочая книга содержит рабочие листы, рабочий лист содержит диапазон ячеек и т. д. Объектом самого высокого уровня является
Application (Приложение). Если вы изменяете его свойства или вызываете его методы, то результат применяется к текущей работе MS Excel. Например, можно завершить работу с Excel, применив метод Quit (Выход) к объекту Ap­
plication:
Application.Quit
Как было отмечено, точка после имени объекта указывает на то, что далее следует имя свойства или метода. Но после точки можно указать и имя объекта для перехода от одного объекта к другому. Например, следующее выражение очищает 5-ю строку рабочего листа май в рабочей книге Отчет:
Application.Workbooks(''Отчет'').Worksheets(''Май'').Rows(5).Delete
Таким образом, ссылки на объекты могут быть очень длинными. Приво- димые выше примеры можно записать значительно короче:
• можно не писать имя объекта Application, так как это подра­
зумевается по умолчанию;
• при работе с подобъектом уже активизированного объекта нет необходи- мости указывать содержащий его объект;
• VBA использует некоторые свойства и методы, которые возвращают объ- ект, к которому они относятся.
Использование последнего правила позволяет быстро указывать нужный объект. Так, в следующем примере устанавливается значение активной ячейки.
ActiveCell.Value = ''Да''

34
ActiveCell (Активная ячейка), ActiveSheet (Активный лист), Acti­
veWorkBook (Активная рабочая книга) и Selection (Выбор - указывает на выбранный объект) являются примерами свойств, возвращающих объект.
Событие представляет собой действие, распознаваемое объектом (на- пример, щелчок мышью или нажатие клавиши), для которого можно запро- граммировать отклик. События возникают в результате действий пользователя программы, или же они могут быть вызваны системой.
Процедуры обработки событий формы условно можно разделить на две группы: процедуры без параметров и с параметрами. К первой группе относят- ся, например, процедуры Initialize, Load, Click и DblClick. Эти про- цедуры имеют следующий синтаксис:
Синтаксис:
Sub UserForm_Событие()
Последовательность инструкций
End Sub
Например, процедура загрузки формы с отображением ее на экране:
Sub UserForm_Load()
Show
End Sub
Ко второй группе процедур относятся Unload, MouseDown, MouseUp и
КеуDown. Эти процедуры имеют следующий синтаксис:
Синтаксис:
Private Sub Fоrm_Событие(СписокПараметров)
Последовательность инструкций
End Sub
Процедура обработки события может быть связана с действием над лю- бым элементом управления (кнопкой, полем, списком, флажком и т.п.). Имя та- кой процедуры может быть выбрано пользователем самостоятельно или фор- мироваться по умолчанию следующим образом:
ИмяЭлементаУправления_Событие(СписокПараметров)
Например,
Private Sub МояКнопка_Click()
Последовательность инструкций
End Sub

35
2.2. Панель инструментов «Элементы управления»
Панель инструментов Элементы управления (рис.1), обычно содержит сле- дующие кнопки:
• Выбор объектов.
• Надпись.
• Поле.
• Поле со списком.
• Список.
• Флажок.
• Переключатель.
• Выключатель.
• Рамка.
• Кнопка
Рис. 1. Панель элементов
• Набор вкладок.
• Набор страниц.
• Полоса прокрутки.
• Счетчик.
• Рисунок.
• RefEdit.
2.2.1. Поле (TextBox)
Элемент управления TextBox позволяет ввести в форму информацию, ко- торая затем может быть использована в программе. Также элемент управления
TextBox может служить и для вывода информации.
Для добавления любого элемента управления в форму необходимо нажать соответствующую кнопку на панели элементов управления, а затем щелкнуть по форме в требуемой позиции.
После создания любого элемента управления желательно сразу же присво- ить ему новое имя, иначе будет использоваться имя, заданное по умолчанию, и при последующем изменении имени придется редактировать все процедуры, в которых имеется старое имя объекта. По умолчанию поля имеют имена Text­
Box1, TextBox2 и т. д.
Новое значение имени любого элемента управления можно установить ли- бо в окне свойств, вызвав его с помощью кнопки, либо непосредственно в коде процедуры, связанной с этим элементом управления. При присвоении имен по- лей используется следующее правило:
TxtИмяОбъекта
Например, txtAge – название поля, в которое вводится возраст, a txtFirstName – название поля, в которое вводится фамилия.
Для установки и получения содержимого поля используется свойство
Value. Это свойство имеет тип Variant.
Например, установка значения свойства поля txtFirstName имеет вид:

36
TxtMyFirstName.Value =''Петров''
'в поле заносится значение Петров
Для получения значения элемента управления TextBox можно использо- вать следующие инструкции:
Dim X As Variant
X=txtFirstName.Value
Если нужно запретить изменение содержимого поля (например, объект
TextBox применяется для отображения доступной только для чтения инфор- мации, такой, как имена файлов), следует «отключить» поле с помощью свой- ства Enabled, установив его равным значению False. Если значение свойст- ва равно True, то изменение содержимого поля разрешено.
TextBox1.Enabled=False
2.2.2. Надпись (Label)
Элемент управления Label предназначен для вывода текста в форме, на- пример для вывода заголовка для тех элементов управления, у которых отсут- ствует собственное свойство Caption. В качестве примера таких элементов можно назвать поле или рисунок в форме. В этом случае надпись находится около этого элемента управления, указывая его назначение.
Для задания текста надписи можно использовать свойство Caption. На- пример:
Label1.Caption=''Адрес''
По умолчанию надписи имеют имена Label1, Label2 и т. д.
2.2.3. Кнопка (CommandButton)
Элемент управления CommandButton задает выполнение некоторого действия, например запуск, прерывание или останов некоторого процесса.
По умолчанию кнопкам присваиваются имена CommandButton1, Com­
mandButton2 и т. д. Для изменения имени кнопки откройте окно свойств и введите новое имя в поле Имя (Name).
Можно задать текст, который будет выводиться на кнопке вместо установ- ленного по умолчанию значения CommandButtonN (где N – порядковый но- мер данной кнопки в общем списке кнопок в соответствии с очередностью их создания). Для этого установите новое значение свойства Caption. Например:
CommandButton1.Caption=''Моя новая программа''
Можно задать автоматическое изменение размеров элемента управления
CommandButton с помощью свойства AutoSize. Если установлено значение этого свойства, равное True, то весь текст надписи, заданный свойством Cap­
tion, будет умещаться на кнопке. Например:
CommandButton1.AutoSize=True

37
Если в форме имеется несколько кнопок, то одну из них можно назначить применяемой по умолчанию. Например, при выводе окна сообщений, в котором содержится запрос на подтверждение удаления данных, кнопка Да обычно за- дана по умолчанию. Если по ошибке нажать клавишу «Пробел» или Enter, то вся информация будет уничтожена. Поэтому нужно назначить применяемой по умолчанию кнопку Нет. Для того чтобы назначить кнопку по умолчанию, нуж- но присвоить значение True ее свойству Default. Тогда свойству Default
остальных кнопок формы автоматически будет присвоено значение False.
Например:
CommandButton1.Default=True
С нажатием кнопки можно связать выполнение некоторого действия, если назначить эту кнопку некоторому событию, например, Нажатие кнопки
(Click). Процедура обработки события Click не имеет параметров. Напри- мер, следующая процедура обработки события выводит в окне отладки Debug
сообщение «Моя новая программа», после того как нажата кнопка Command­
Button1.
Private Sub CommandButton1_Click()
Debug.Print "Моя новая программа"
End Sub
Можно изменить состояние кнопки: запретить пользователю нажатие кнопки, если оно приведет к опасным или нежелательным последствиям. На- пример, можно отключить кнопку печати, пока не выбран принтер. При запрете доступа кнопка выглядит серой. Для отключения объекта используется значе- ние False свойства Enabled.
2.2.4. Список (ListBox)
Элемент управления ListBox предназначен для хранения списка значе- ний, из которого можно выбрать один или несколько элементов. По умолчанию списки имеют имена ListBoxl, ListBox2 и т. д.
Существуют следующие варианты выбора элементов в списке:
1 – один элемент,
2 – несколько последовательно расположенных элементов,
3 – несколько произвольно расположенных элементов.
Способ выбора элементов в списке определяется свойством MultiSe­
lect, значение которого (числовое или заданное константой) можно указать в окне свойств или в программе.
Вариант
Значение
Константа
1 0
fmMultiSelect

38 2
1
fmMultiSelectExtended
3 2
fmMultiSelectMulti
Например, следующая инструкция позволяет выделить в списке несколько последовательно расположенных элементов:
ListBox1.MultiSelect=fmMultiSelectExtended
Для добавления новых элементов в список используется метод AddItem.
При этом нужно задать параметр, который определяет строку с названием до- бавляемого в список элемента:
ListBox1.AddItem элемент
В качестве элемента может выступать, в частности, число, имя перемен- ной, элемент массива (a(i)), в этом случае в список добавляется их значение.
В следующей процедуре метод AddItem добавляет в список названия ме- сяцев года:
Public Sub Months()
ListBox1.AddItem "January"
ListBox1.AddItem "February"
ListBox1.AddItem "December"
End Sub
Для заполнения списка последовательными числами можно использовать процедуру
Public Sub NumberList()
For i=1 To 20
ListBox1.AddItem i
Next i
End Sub
Пусть в программе требуется определить выбранные элементы списка, на- пример, узнать их значения. Если в списке задан выбор только одного элемен- та, то свойство Text элемента управления ListBox содержит выделенный элемент, в противном случае свойство Text равно пустой строке. Свойство
ListIndex содержит номер выделенного пункта в списке. Выбранный в спи- ске элемент можно вывести, например, в окне отладки Debug с помощью инст- рукции
Debug.Print ListBox1.Text
Если известно, что в списке выделено несколько элементов, то необходимо

39
проверить каждый пункт списка, чтобы определить, выделен он или нет. Для этого используется свойство Selected, которое по индексу пункта возвраща- ет значение True, если пункт выбран, и значение False – в противном случае.
Например, если необходимо найти сумму выделенных элементов в списке, то можно воспользоваться следующей инструкцией:
For i = 0 To listBox1.ListCount-1
If ListBox1.Selected(i) = True Then
S = S + ListBox1.List(i)
End If
Next
Свойство ListCount содержит общее количество элементов (пунктов) в списке. При этом первый элемент имеет номер «0», а последний ListCount-1. Свой- ство List возвращает по номеру пункта его текст. Для удаления элемента из списка используется метод RemoveItem, при этом в качестве параметра метода указывается номер удаляемого пункта.
Например, для очистки списка может использоваться следующая про- цедура:
Public Sub NumberList()
For i=0 To ListBox1.ListCount-1
ListBox1.RemoveItem i
Next i
End Sub
2.2.5. Поле со списком (ComboBox)
Если используется поле со списком, то необходимый элемент можно вы- брать сразу из списка или ввести его имя вручную для автоматического по- иска. Текущее значение в элементе управления ComboBox отображается в поле, а список всех возможных значений выводится при нажатии кнопки со стрелкой. Элемент управления ComboBox отличается от элемента управле- ния ListBox тем, что в нем можно явно выделить требуемое значение.
Существует два типа полей со списком. С помощью объектов первого ти- па можно ввести в поле данные, которые затем можно использовать как:
• критерий выбора элементов в списке; например, если список содержит на- звания месяцев года и вводится слово «May», то осуществляется пере- мещение на этот пункт списка;
• новое значение; например, для задания новой величины масштаба изобра- жения; таким образом, в программе должен быть предусмотрен случай, ко- гда введенного значения нет в списке.
Если элемент управления ComboBox относится ко второму типу, то для выбора элемента необходимо открыть список, нажав кнопку со стрелкой, а

40 затем указать в списке требуемый элемент списка. Этот элемент появится в по- ле элемента управления ComboBox.
Тип объекта ComboBox можно указать с помощью свойства Style, зна- чение которого в программе укзывается либо числом (0, 2), или константой:
Тип
Значение
Константа
Ввод данных
0
fmStyleDropDownCombo
Вы6op значения из списка
2
fmStyleDropDownList
Для заполнения поля со списком применяется метод AddItem. Для полу- чения значения, содержащегося в поле элемента управления ComboBox,
можно использовать свойства Value и Text.
Например, два следующих оператора выполняют одно и то же действие ­
выводят в окне отладки Debug текст, содержащийся в поле элемента управ- ления ComboBox:
Debug.Print ComboBox1.Value
Debug.Print ComboBox1.Text
При присвоении значения свойству Text автоматически выполняются следующие действия:
• заданный текст выводится в поле элемента управления ComboBox (если заданный текст не является элементом списка, то выдается сообщение об ошибке);
• свойству ListIndex элемента ComboBox присваивается индекс элемента списка, соответствующего заданному значению.
2.2.6. Флажок (Checkbox)
Элемент управления CheckBox имеет вид маленького квадрата. С флаж- ком можно связать некоторый заголовок (надпись). Если этот квадрат пуст, то при щелчке по нему в нем появляется галочка, и, наоборот, если квадрат был помечен галочкой, то при щелчке по нему галочка исчезает. Если флажок установлен (есть галочка), то свойство Value элемента управления CheckBox
имеет значение True, в противном случае его значение False.
Состояние флажка используется в процедурах обработки события Click
флажка или в других процедурах, где требуется анализ установки этого флажка.
Если флажок недоступен (блокирован свойством Enabled), то его значе- ние (свойство Value) равно константе Null.
По умолчанию флажки имеют имена: CheckBox1, CheckВох2 и т. д. С помощью свойства Name можно присвоить флажку новое имя. Свойство Cap­
tion позволяет установить текст (надпись), который будет появляться рядом с

41
элементом управления CheckBox. Если заголовок флажка очень длинный, то можно разместить его в нескольких строках, присвоив свойству WordWrap
значение True.
Описать работу элемента управления CheckBox можно, например, с по­
мощью следующих инструкций:
Public Sub CheckBoxl_Click()
If CheckBoxl.Value=True Then
 инструкции 1
Else
 инструкции 2
End If
End Sub
2.2.7. Переключатель (OptionButton)
Элемент управления OptionButton предназначен для выбора одного ва- рианта из нескольких. Переключатель может менять значения независимо от других или входить в состав группы переключателей. В любое время в группе может быть выбран только один переключатель. Отмена выбора одного эле- мента управления OptionButton при выделении другого в группе осуществ- ляется автоматически.
По умолчанию переключатели имеют имена OptionButton1, Option­
Button2 и т. д.
Группировка переключателей может быть выполнена двумя способами:
• С помощью элемента управления Рамка (Frame). Все объекты управле- ния OptionButton, расположенные в одной рамке, рассматриваются как чле- ны одной группы. Для каждого набора переключателей должна использоваться своя рамка.
• С помощью свойства для группировки объектов – GroupName. При вы- боре элемента управления OptionButton отменяется выбор всех переключа- телей, значение свойства GroupName которых совпадает со значением того же свойства выделенного элемента управления OptionButton. При использова- нии свойства GroupName отпадает необходимость в создании элемента управления Frame. Свойство GroupName может быть установлено как в окне свойств, так и в программе.
Свойство Value активизированного переключателя имеет значение True.
Процедура, описывающая работу трех переключателей, может иметь вид:
Public Sub CheckOptionButton()
If OptionButton1.Value Then
 инструкции 1
Elself OptionButton2.Value Then
 инструкции 2

42
Elself 0ptionButton3.Value Then
 инструкции 3
End If
End Sub
2.2.8. Рамка (Frame)
Элемент управления Frame предназначен для группирования элементов в форме. По умолчанию рамки имеют имена Frame1, Frame2 и т. д. Установить новое значение имени рамки можно с помощью свойства Name. Свойство Cap­
tion определяет текст (надпись), который появляется вверху рамки. Напри- мер:
Frame1.Caption ="Варианты заданий"
1   2   3   4   5   6   7   8


написать администратору сайта