- •Глава 1. Взгляд на Excel 2007 и vba
- •Окно программы Microsoft Excel 2007
- •Режим конструктора и элементы ActiveX
- •Свойства элемента управления “Кнопка”
- •Элементы управления “Поле” и “Надпись”
- •Сохранение рабочих книг Microsoft Excel
- •Уровень безопасности
- •Процедура, выполняемая при открытии книги
- •Поле со списком и список
- •Изображение
- •Динамическое изменение цвета кнопки
- •Пример вывода информации о текущем времени
- •Полоса прокрутки
- •Динамическое перемещение кнопки
- •Разработка игры
- •Переключатели
- •Основные сведения по vba
- •Заключение по первой главе
Переключатели
В этом разделе мы рассмотрим пример, в котором используется очень популярный интерфейсный элемент управления “Переключатель” (рис. 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 |
Строка |
На этом мы завершим вводную главу. В следующих главах нам придется воспользоваться еще рядом стандартных процедур и функций, пояснения по которым будут приводиться по ходу изложения.