Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ch01.doc
Скачиваний:
15
Добавлен:
03.09.2019
Размер:
350.72 Кб
Скачать

Переключатели

В этом разделе мы рассмотрим пример, в котором используется очень популярный интерфейсный элемент управления “Переключатель” (рис. 1.44). Как правило, он используется для того, чтобы установить определенную опцию, либо отобразить конкретный набор элементов управления.

Рис. 1.44. Размещение элемента управления “Переключатель” на листе

На рис. 1.45 показан интерфейс, который нам необходимо разработать на листе новой книги.

Для верхнего переключателя в качестве значения свойства Name используем NN, а для нижнего соответственно — MS. Подберем шрифт для отображения подписи, необходимый цвет и текст самой подписи на элементе управления (значение свойства Caption).

В правой части листа расположим элемент управления “Поле со списком” для отражения городов (Name – SpSity) и еще один элемент управления “Поле со списком” для фирм (Name – SpFrm).

Рис. 1.45. Пример использования переключателей

Функциональность разработки выглядит следующим образом. При щелчке по одному из переключателей список городов заполняется городами указанной области. В одном случае это будут города Нижегородской области, а в другом — Московской. Далее щелчком по определенному городу в поле со списком городов производится заполнение другого поля со списком. В него включаются организации расположенные в указанном городе. На листингах 1.29 и 1.30 представлены процедуры, связанные со щелчками по переключателям.

Листинг 1.29. Обработка щелчка по переключателю NN

Private Sub NN_Click()

SpCity.Clear

SpFrm.Clear

SpCity.AddItem "Арзамас"

SpCity.AddItem "Балахна"

End Sub

Листинг 1.30. Обработка щелчка по переключателю MS

Private Sub MS_Click()

SpCity.Clear

SpFrm.Clear

SpCity.AddItem "Красногорск"

SpCity.AddItem "Мытищи"

SpCity.AddItem "Раменское"

End Sub

После заполнения поля со списком городами на очереди — процедура обработки щелчка по данному элементу управления (листинг 1.31).

Листинг 1.31. Обработка щелчка по полю со списком SpCity

Private Sub SpCity_Click()

SpFrm.Clear

If SpCity.Text = " Красногорск" Then

SpFrm.AddItem "Альт"

SpFrm.AddItem "Веда"

ElseIf SpCity.Text = "Мытищи" Then

SpFrm.AddItem "Миг"

SpFrm.AddItem "Марс"

ElseIf SpCity.Text = "Раменское" Then

SpFrm.AddItem "Сатурн"

SpFrm.AddItem "Юпитер"

ElseIf SpCity.Text = "Арзамас" Then

SpFrm.AddItem "Меркурий"

SpFrm.AddItem "Зенит"

ElseIf SpCity.Text = "Балахна" Then

SpFrm.AddItem "Венера"

SpFrm.AddItem "Ника"

End If

End Sub

Осталось завершить разработку. Так, при выборе фирмы в поле со списком фирм на рабочем листе в ячейке Н8 должно отображаться название фирмы. Для этого определим процедуру обработки щелчка по полю со списком SpFrm в виде, представленном на листинге 1.32.

Листинг 1.32. Обработка щелчка по переключателю SpFrm

Private Sub SpFrm_Click()

Range("H8").Value = SpFrm.Text

End Sub

Результат функционирования разработки показан на рис. 1.46.

Рис. 1.46. Демонстрация работы с элементами управления типа ”Переключатель”

Основные сведения по vba

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

При написании процедур мы уже встречались с переменными. Переменной можно считать фрагмент памяти в компьютере, которому мы присвоили имя. Для обращения (записи или считывания информации) к этому фрагменту в программе, следует использовать выбранное имя. Для того чтобы в зависимости от требований программы отводить различные области памяти для переменных, существуют типы данных. Когда мы создаем переменную, то сразу указываем (явно или неявно), к какому типу данных она относится. Основные типы данных языка VBA приведены в табл. 1.3. В этой таблице присутствуют как простые типы (например, Integer и String), так и достаточно сложные (типа Object и Variant). Переменные типа Object занимают немного места в памяти компьютера — всего 4 байта, однако при этом позволяют работать с такими сложными объектами как приложение Microsoft Word или 1С:Предприятие 8 из процедур Microsoft Excel. В последующих главах мы это увидим на примерах.

В VBA существуют два способа отведения памяти для переменных.

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

Dim Имя_Переменной As Тип_Данных.

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

Можно несколько ускорить работу при написании программ — не объявлять переменные. В этом случае при появлении в тексте переменной, которая не была описана с помощью инструкции Dim, она автоматически становится переменной типа Variant и для нее отводится соответствующая память.

Таблица 1.3. Основные типы данных

Тип данных

Область значений

Комментарий

Boolean

True (Истина) и False (Ложь)

Логическое значение

Byte

от 0 до 255

Число без знака

Date

01.01.0100– 31.12.9999

Дата и время

Object

4 байта

Ссылка на объект

Integer

Короткое целое

От –32768 до 32767

Variant

Любое значение

Для хранения переменных любых типов

Long

Длинное целое

От –2 147 483 648 до 2 147 483 647

String

Длина строки от 0 до 64 Кбайт

Хранение строковых значений

Более сложный вид данных по сравнению с переменной — это массив, который представляет набор однотипных данных (набор данных определенного типа). Массив, как и переменная, задается именем. При этом каждый элемент массива определяется его индексом. Например, Mass(3) — третий элемент массива с именем Mass . Объявление массива производится аналогично объявлению переменных:

Dim Имя_Массива ( Граница_Массива ) As Тип_Данных_Массива.

По умолчанию индексация массивов начинается с 0. Например, в строке

Dim Mass ( 10 ) As Integer

отводится память под массив Mass. При этом в памяти выделяется 11 ячеек — каждая ячейка для хранения данных типа Integer. Для определенности заметим, что для одной переменной типа Integer отводится 2 байта в памяти компьютера.

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

Так для вывода сообщений на экран используется функция

MsgBox ( сообщение [, кнопки ] ,[заголовок]),

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

Таблица 1.4. Константы функции MsgBox

Константа

Значение

Комментарий

vbOKOnly

0

Только кнопка OK

vbOKCancel

1

Кнопки OK и Cancel

vbYesNoCancel

3

Кнопки Yes, No и Cancel

vbYesNo

4

Выводятся кнопки Yes и No

vbCritical

16

Critical Message

vbInformation

64

Information Message

vbDefaultButon1

0

Выделяется первая кнопка

vbDefaultButon2

256

Выделяется вторая кнопка

vbDefaultButon3

512

Выделяется третья кнопка

vbApplicationModal

0

Модальность приложения

vbSystemModal

4096

Модальность системы

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

MsgBox ( сообщение , 0),

что соответствует тому, что выбраны три константы с нулевыми значениями (vbOKOnly, vbDefaultButon1 и vbApplicationModal).

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

Например, мы можем сформировать окно диалога с тремя кнопками (Yes, No, Cancel) и установкой фокуса (выделения) на третью кнопку. Для этого вызов функции можно оформить следующим образом:

MsgBox (сообщение , vbYesNoCancel+ vbDefaultButon3).

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

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

Таблица 1.5. Константы, возвращаемые функцией MsgBox

Константа

Значение

Нажатая клавиша

vbOK

1

OK

vbCancel

2

Cancel

vbYes

6

Yes

vbNo

7

No

Рассмотрим теперь функцию ввода:

InputBox (сообщение [,заголовок][,значение по умолчанию]).

Первые два параметра вам знакомы по функции MsgBox. Значение по умолчанию определяет то значение, которое появляется в поле ввода. Фактически это способ задать при вводе наиболее ожидаемое значение. Если этот параметр опущен, то в поле ввода будет пустая строка. В качестве примера использования данной функции приведем следующую конструкцию:

z = InputBox(“Введите число маршрутов”,

”Начальная информация”,1).

В результате перед нами откроется окно ввода с заголовком Начальная информация.

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

Некоторым недостатком функции Val является неопределенность типа числовых данных. Поэтому наряду с ней можно, например, использовать другую стандартную функцию преобразования типов — CInt(выражение), которая позволяет выполнить преобразование выражения в число типа Integer. Существуют аналогичные функции, выполняющие преобразование в другие числовые типы данных.

Таблица 1.6. Функции преобразования типов

Функция

Возвращаемое значение

Val

Число

CInt

Число типа Integer

CStr

Строка

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]