03-02-Свойства элемента управления.docm - пример к п 3.7.
Вы уже знаете, что настраивать элементы управления можно вручную изменяя их свойства в окне Properties. А что если поменять свойство прямо в программном коде? Давайте попробуем.
Вернемся к нашему примеру. Модифицируем код обработчика события Click для кнопки cmd_First таким образом, чтобы при нажатии на эту кнопку изменялся бы текст, который выводит надпись lbl_First.
Текст надписи задается при помощи свойства Caption. Выше мы уже обсуждали теорию работы с объектами, а теперь пришло время практики.
Чтобы изменить свойство Caption надписи из кода, используется такая конструкция:
lbl_First.Caption = "Текст"Введите в обработчик события нажатия на кнопку имя элемента управления lbl_First. Поставьте после него точку. Если вы набрали имя правильно, редактор предложит список свойств и методов, доступных данному элементу управления.

Рис.11. Подсказка о свойствах и методах объекта в редакторе кода
Вы можете ввести первые буквы нужного свойства или метода, редактор автоматически найдет его в списке. Для окончания ввода вам будет достаточно нажать клавишу Enter. Так же вы можете, воспользовавшись полосой прокрутки, найти свойство или метод вручную и, сделав по его наименованию двойной щелчок (или, опять же, нажав Enter) завершить ввод.
После того, как lbl_First. Caption введено, наберите знак = и, в кавычках - текст, который должен быть присвоен параметруCaption. В результате окно редактора кода должно выглядеть так

Рис.12. Присвоение нового значения свойству элемента управления
lbl_First. Caption = "Надпись изменена"
Теперь если вы запустите форму и нажмете на кнопку, текст надписи будет изменен.
Аналогично, мы можем считывать значения из свойств элементов управления и использовать их в программах. Например, напишем код, выводящий текст, который записан в свойстве Caption элемента управления lbl_First, в окне сообщения. Для этого добавим на форму еще одну кнопку, назовем ее cmd_Second и добавим в ее обработчик события Click такой код:
Чтобы понять этот код, достаточно попытаться "перевести" его на обычный человеческий язык. Получится примерно следующее: "Отобразить в окне сообщения текст, который содержится в свойстве Caption объекта lbl_First ". Или, еще проще: "Отобразить в окне сообщения то, что написано на элементе управления lbl_First ". Вот, как выглядит результат работы.

Рис. 13. Чтение значений из свойств элементов управления
Элементы управления имеют свойства по умолчанию, обращение к которым возможно и без уточняющего оператора. Например, у надписи это свойство Caption. Значит, два нижеприведенных фрагмента кода для надписи lbl_Firstприводят к идентичным результатам:
lbl_First.Caption = "Новая надпись" lbl_First = "Новая надпись"Выводы
В этой лекции мы познакомились с VBA -редактором и основными приемами работы с элементами управления. В следующей мы обсудим некоторые подробности, касающиеся использования других элементов управления, рассмотрим приемы работы с ними.
Контрольные вопросы.
1. VBA-редактор?
2. Особенности главного меню VBA-редактора?
3. Формы и элементы управления редактором?
4. Окно Properties - управление свойствами?
5. Свойства и методы элементов управления в программах
6. Элементы управления VBAредактора?
ГЛОССАРИЙ
| Русский язык | Английский язык | Казахский язык |
| Файл | File | Файл |
| Окно | Window | Терезе |
| Элемент | Element | Мүше |
| Редактор | Editor | Редактор |
| Список | List | Тізім |
| Документ | Document | Құжат |
| Параметры | Options | Параметрлері |
| Программа | Program | Бағдарлама |
Тестовые вопросы
1. Можем ли мы нарисовать таблицу на странице HTML?
- Да, с тэгом <table>
- Да, с тэгом <draw table>
- Нет, страница HTML содержит только текст
- Нет, это не MS Word
2. <H1 Align=”center”> Что это значит?
- Самый большой заголовок в центре
- Самый маленький заголовок слева
- Самый большой заголовок справа
- Самый маленький заголовок в центре
3. Где сохраняются процедуры VBA, сопутствующие документу Office?
- В самом Office документе
- В подобной папке, но отдельным файлом
- В специальной папке VBA на диске C
- В специальной папке VBA локального пространства сети
4. Какой символ типично используется в VBA как «shorthand» для оператора PRINT?
- Знак вопроса(?)
- Символ “P”
- Восклицательный знак (!)
- Знак доллара
5. Объявление переменных, предполагающих хранение чисел с нормальной точностью:
- Single
- Long
- Integer
- Double
6. Для данной части кода функции MySalary(IF Revenue>=1000000 THEN MySalary=500000 ELSE MySalary=”Poor me!” END IF), необходимо решить какой верный тип данных следует использовать для объявления функции:
- Variant
- Currency
- Single
- Double
7. Дана часть кода функции My_Passing_Grade(IF Final_Grade>=71 THEN My_Passing_Grade =TRUE ELSE My_Passing_Grade = FALSE END IF). Выберите верный тип данных для объявления переменных и функции:
- Function My_Passing_Grade(Final_Grade as Single) as Boolean
- Function My_Passing_Grade(Final_Grade as Integer) as Boolean
- Function My_Passing_Grade(Final_Grade as Integer) as String
- Function My_Passing_Grade(Final_Grade as Single) as String
8. Переменная типа данных String MyActor =”Johnny Depp”. Который из нежеперечисленных вариантов преобразует String в lower case (small letters)?
- LCase(MyActor) and LCase(“Johnny Depp”)
- LCase(Johnny Depp)
- LCase(Johnny)
- LCase(My Depp)
Задания СРС и СРСП
Подготовить презентацию на тему VBA-редактор
Список рекомендуемой литературы.
1. Экономическая информатика и информационные системы. В. Яворский, А.Амиров, Фолиант, 2008.
2 Internet ресурс: http://www.intuit.ru/studies/courses/3735/977/info
| Информационные технологии в Экономике 3 кредита Лекционное занятие №17-18 Основы VBA: синтаксис, переменные, типы данных, встроенные и пользовательские функции, Массивы, циклы, принятие решений Асс.профессора Токсанбекова Арайлым Айдаровна | 4ФЭП-Ф, 3УиА 5,7 семестры 2018-2019 уч.год |
Синтаксические описания
Синтаксис языка программирования - это правила написания программ.
Рассмотрим пример - возьмем из справочной системы описание команды. Мы пока не будем вдаваться в смысл ключевых слов (перед нами - описание оператора цикла), приведенных здесь, остановимся на основных частях описания.
For counter = start To end [Step step] [statements] [Exit For] [statements] Next [counter]В синтаксических описаниях VBA жирным шрифтом выделены ключевые слова языка, курсивом даны названия переменных и других элементов языка. В квадратных скобках располагаются необязательные элементы – то есть такие элементы, без описания которых можно обойтись. Например, в приведенном описании блоки [statements] будут содержать в себе "полезную нагрузку" цикла – операторы, которые будут выполняться многократно, однако цикл будет работать и без них.
Элементы, которые допускают альтернативный выбор, разделяются знаком " | ". Например, такая запись: " one | two " обозначает " one или two".
Ниже мы будем останавливаться на существенно важных особенностях тех или иных конструкций. Если вам понадобятся подробности - вы сможете найти их в справке к VBA.
Теперь рассмотрим понятие переменной — важнейшее понятие в любом языке программирования.
Переменные
05-01-Переменная.docm - пример к п. 5.2.
Переменная — это именованная область памяти, где могут храниться различные данные, которые можно изменять во время выполнения программы. Переменные - это одна из основ любой программы. В них можно сохранять введенную пользователем информацию, их можно использовать для накопления данных, обработанных в программе и так далее. Если бы не было переменных - программирования не существовало бы.
У переменной есть несколько важнейших характеристик. Первая - имя переменной. Используя имя, мы можем обращаться к переменной в программе. Вторая характеристика - это тип данных, которые могут храниться в переменной. Тип определяет характер данных, которые мы можем хранить в переменной. Например, это могут быть числовые данные (возраст пользователя) и строковые данные (имя пользователя).
О типах мы поговорим ниже, а пока займемся именами переменных. Давая переменным имена, следует придерживаться следующих правил.
· Имя переменной должно состоять из букв и цифр, причем оно должно начинаться с буквы.
· Имя не может быть длиннее 255 символов
· Имя не должно содержать специальных знаков (#, $, % и т.д.) и пробелов.
· В качестве имен нельзя использовать зарезервированные слова VBA (например – if, dim, for и т.д.).
При именовании переменных старайтесь пользоваться латинскими буквами. Иначе возможны проблемы при работе ваших программ на различных версиях Office.
Например, такие имена переменных выглядят вполне корректно: str_Name, num_Age, str_Name1, num_Item2 и т.д. Обратите внимание на префиксы, которыми мы снабдили имена переменных. Это признак особого стиля именования переменных. Он очень напоминает стиль именования элементов управления, который мы рассматривали выше.
Напишем программу на VBA, иллюстрирующую простой пример работы с переменными. Сначала она должна задать пользователю вопрос: "Как вас зовут", а потом — вывести его имя в окне сообщения.
Для этого добавим в документ Microsoft Word кнопку с именем cmd_Variables и надписью " Имя пользователя ". Зададим ее обработчику Click следующий код (листинг 5.1.):
txt_Name = InputBox("Введите ваше имя") MsgBox (txt_Name)Листинг 5.1. Код обработчика Click кнопки cmd_Variables
Первая строка этого кода содержит новую для вас функцию InputBox. Она используется для вывода окна с сообщением и полем для ввода данных. Строка, которая передается функции в качестве параметра - это и есть сообщение, которое будет выведено в окне.
На рис. 1. вы можете видеть это окно.

Рис. 1. Окно ввода данных
Выражение txt_Name = означает, что мы присваиваем переменной с именем txt_Name то, что пользователь введет в окне ввода данных, как бы говорим программе: "Сохрани в переменной txt_Name то, что пользователь введет в окне". Когда пользователь сообщает свое имя и нажимает OK —введенная им строка записывается в переменную txt_Name. Введем на приглашение программы имя "Александр", вы можете ввести любое другое имя.
Теперь мы можем выполнять много разных действий с этой переменной. В частности - использовать в качестве параметра, передаваемого функции MsgBox. В данном примере мы так и поступили - вызвали MsgBox, указав вместо выводимого текста имя переменной. В результате в окне сообщения вывелось имя пользователя, введенное на предыдущем этапе.

Рис. 2. Имя пользователя в окне сообщения
Обратите внимание на то, что мы не заключили имя переменной в кавычки. Иначе в окне сообщения вывелось бы лишь имя переменной (txt_Name), но не хранимый в ней текст.
Типы данных в VBA
Тип данных определяет важнейшие свойства переменной. А именно, следующее:
· что может храниться в переменной (текст, число, некоторые другие виды данных);
· размер памяти, необходимый для хранения переменной (измеряется в байтах);
· операции, которые можно производить с переменной (например, невозможно извлечь квадратный корень из слова "Привет" так как эта операция не определена для строковых данных);
Вы уже можете предположить как минимум два типа данных, которые могут хранить переменные - строковые и числовые. На самом деле список типов данных VBA гораздо обширнее.
В табл. 1. вы найдете информацию об основных типах данных VBA.
| Таблица 1. Типы данных в VBA | |||
| Тип данных | Размер, байт | Описание | Диапазон значений |
| Variant | 16 (числа) 22+длина строки (строки) | Может хранить данные любых типов | |
| Integer | 2 | Целое число | от -32768 до 32767 |
| Long | 4 | Длинное целое | от -2147483648 до 2147483647 |
| Single | 4 | Число с плавающей запятой обычной точности до значения и для положительных | Для отрицательных: от -3.402823E38 до -1.401298E-45 Для положительных: от 1.401298E-45 до 3.402823E38 |
| Double | 8 | Число с плавающей запятой двойной точности, для отрицательных значений и для положительных | Для отрицательных от -1.79769313486231E308 до -4.94065645841247E-324 Для положительных: от 4.94065645841247E-324 до 1.79769313486232E308 |
| Byte | 1 | Байт | от 0 до 255 |
| Currency | 8 | Денежный формат | от -922,337,203,685,477.5808 до 922,337,203,685,477.5807 |
| Decimal | 14 | Масштабируемое целое | 29-значное число с 28 знаками справа от запятой |
| Boolean | 2 | Логический | True или False |
| Date | 8 | Дата и время | от 1 января 100 г. до 31 декабря 9999 г. |
| Object | 4 | Ссылка на объект | Различные виды объектов |
| String | Зависит от длины строки | Строка | |
Как видите, в VBA существует немало типов данных. Наверное, сейчас вам кажется, что их слишком много. Может показаться, что нет ничего удобнее типа данных Variant. Однако надо учесть, что за универсальность типа Variant приходится платить производительностью и системными ресурсами. Чем больше места требуется для хранения переменной - тем ниже скорость работы с ней.
Если вы хотите, чтобы ваши программы работали как можно быстрее - выбирайте типы данных, которые используют для хранения вашей информации минимум системных ресурсов. Если вы сомневаетесь, хватит ли размерности выбранного типа данных для решения ваших задач - возьмите более емкий тип.
Как правило, для работы с дробными числами и различных вычислений используют тип данных Double. Для переменных, которые используются в циклах, счетчиках- Integer или Long. В работе со строками используют String. Объектные переменные имеют самые разные типы, которые определяются объектами, для обращения к которым они создаются. В небольших проектах вполне оправдано использование переменных типа Variant – это не слишком замедлит работу. Однако, если размер проекта растет или вы нуждаетесь в ускорении ресурсоемких вычислений – подходите к выбору типов данных ответственно.
Если при объявлении переменной не указывать ее тип - он автоматически устанавливается в Variant. Объявляя переменную без указания типа, вы пользуетесь преимуществами работы с объявленными переменными, и, в то же время, можете гибко использовать переменную для хранения различных типов данных (например – чисел с плавающей запятой и целых чисел). Такой подход - объявление переменных без указания типа - допустим при создании небольших проектов, а так же - на начальном этапе работы над достаточно масштабными программами, когда вы не знаете точно, какой тип данных понадобится для той или иной переменной. В листингах, которые вы найдете ниже, мы явно задавали тип переменных лишь тогда, когда это либо требовалось по ходу выполнения примера (например - типы объектных переменных), либо, когда это нужно для лучшего понимания материала (числовой тип для возраста, строковой - для имени и т.д.) В основном же мы использовали переменные типа Variant.
Выше мы уже говорили о венгерской нотации как о способе именования объектов. Те же правила действуют и для переменных. Префикс имени обычно говорит о типе переменной. В табл. 5.2. приведены некоторые префиксы.
| Таблица 2. Префиксы и типы переменных | |
| Префикс имени переменной | Пояснения |
| s, str | Строковая переменная |
| n, num | Числовая переменная (существует множество числовых типов данных, название каждого из которых может быть использовано в качестве префикса, например, int для Integer, dbl для Double и т.д.) |
| b, bool | Логическая переменная |
| O, obj | Объектная переменная |
Для работы с переменными можно использовать два подхода. При первом мы выбираем имя переменной и используем ее в программе без каких-либо подготовительных действий. Именно так мы работали с переменной в примере к п. 5.2. Такая переменная приобретет тип Variant. Второй подход предусматривает объявление переменных перед использованием.
Массивы
Решим простую задачу: ввести в ответ на вопросы программы фамилии сотрудников. Если фамилий немного - 5 или 10 - использование переменных, с которыми вы уже знакомы, вполне оправдано. Программа будет состоять из нескольких строк такого вида:
a = InputBox("Введите фамилию сотрудника").Как быть, если нужно работать со списком из 20 фамилий? А если их будет 50, 1000 или их количество должно быть определено в ходе выполнения программы?
Для обработки больших объемов информации использовать переменные неудобно. Что же делать? Ответ прост: использовать массивы.
Массив - это именованный набор индексированных ячеек. Ячейки так же называют элементами или индексированными переменными.
У каждого массива 5 основных характеристик: имя, размерность, число элементов, номер первого элемента и тип элементов.
· Имя - правила именования массивов аналогичны правилам именования переменных.
· Размерность - одномерные массивы напоминают одну строку таблицы, каждая ячейка которой содержит какие-то данные. Многомерные массивы имеют больше измерений. Их можно сравнивать с таблицами, имеющими множество строк и столбцов и с наборами таблиц.
· Нумерация элементов подчиняется следующим правилам:
o По умолчанию нумерация элементов массива начинается с 0. Первый по счету элемент получит индекс 0, второй - 1 и т.д.
o В объявлении отдельного массива можно явно указать индекс его первого и последнего элемента, разделив их ключевым словом To.
o Если вы хотите, чтобы индексы всех массивов начинались с 1, добавьте в раздел объявлений модуля (вне процедур, функций и обработчиков событий) команду OptionBase 1.
· Тип - подчиняется тем же правилам, которые мы ранее рассмотрели для переменных. Если пользователь не указал его явно, массив получит тип по умолчанию - Variant. Это требует больше системных ресурсов, но позволяет обрабатывать значения различных типов.
Циклы
Циклы позволяют выполнять одни и те же команды много раз. В табл. 2. собрана информация об основных видах циклов.
| Таблица 2. Виды циклов | |
| Название цикла | Вид |
| For - Next | С фиксированным количеством повторов. Выполняется заданное количество раз |
| While - Wend | С предусловием. Если не верно условие, заданное на входе в цикл, может не выполниться ни разу |
| Do - Loop | С постусловием. Выполняется по меньшей мере один раз. |
Цикл For - Next
07-02-Цикл For-Next.docm - пример к п. 7.4.
Решим задачу: вывести цифры от 1 до 10 в окнах сообщений. Ее можно решить и без использования циклов, написав 10 строк такого вида: MsgBox ("1"). А вот конструкция For - Next позволяет делать то же самое гораздо изящнее. В листинге 7.2. вы можете найти решение задачи.
For i = 1 To 10 MsgBox (i) Next iЛистинг 7.2. Вывод цифр от 1 до 10 в цикле
Ключевое слово For задает начало цикла. После него следует переменная i, которая увеличивается при каждом проходе цикла. В ходе работы конструкции For - Next значение i изменяется от 1 до 10.
Начальное значение счетчика устанавливается при входе в цикл. Мы просто приравниваем i какому-либо числу. Конечное значение переменной задается после ключевого слова To. Переменная i доступна внутри цикла - ведь именно ее мы выводим в окне сообщения.
Ключевое слово Next с указанием переменной, к которой оно относится, закрывает цикл.
В качестве первого и последнего значения счетчика цикла можно использовать какую-нибудь переменную. Она может быть определена в ходе выполнения программы, но до входа в конструкцию For - Next.
Вы могли заметить, что переменная цикла меняется с приращением 1. Это приращение можно задать в явном виде с помощью ключевого слова Step. В листинге 7.3. вы можете видеть пример оператора For - Next, выводящего нечетные числа в диапазоне от 1 до 10.
For i = 1 To 10 Step 2 MsgBox (i) Next iЛистинг 7.3. Вывод нечетных цифр в диапазоне от 1 до 10 в цикле
С помощью ключевого слова Step можно создать не только возрастающий, но и убывающий счетчик. Для этого в Stepнадо указать отрицательное число и проследить за тем, чтобы первое значение переменной цикла было больше последнего. Например, так: For i=10 to 1 Step -1. Первое значение переменной в таком цикле будет равняться 10, второе - 9 и т.д. - до 1.
Теперь перейдем к совместному использованию циклов и массивов. Напишем программу, которая предлагает пользователю ввести 10 фамилий, сохраняет их в массиве, а потом выводит в окнах сообщений.
Готовая программа приведена в листинге 7.4.
Dim MyArray(9) For i = 0 To 9 MyArray(i) = InputBox("Введите фамилию №" & i + 1) Next i For i = 0 To 9 'Начало еще одного цикла MsgBox ("Фамилия №" & (i + 1) & " " & MyArray(i)) Next i 'Конец циклаЛистинг 7.4. Ввод и вывод 10 фамилий
Обсудив цикл типа For-Next, продолжим разговор о массивах. На очереди - многомерные массивы.
| Индекс | 1 | 2 |
| 1 | Иванов | 898989898 |
| 2 | Петров | 343434343 |
| 3 | Сидоров | 565656565 |
| 4 | Александров | 121111212 |
| 5 | Маринин | 545454544 |
Эта программа очень похожа на те, которые мы писали для работы с одномерными массивами. В цикле, тело которого повторяется 5 раз, мы поочередно запрашиваем фамилию и номер телефона.
Один цикл неудобно использовать для работы с массивами больших размерностей. Нетрудно представить себе, какой громоздкой получится решение задачи копирования одной матрицы 100х100 в другую такую же. Кстати, при обработке данных в Microsoft Excel вам постоянно придется обращаться с большими двумерными матрицами. К счастью, существует механизм вложенных циклов, который помогает решать подобные задачи.
Вложенные циклы For-Next
07-04-Вложенные циклы.docm - пример к п. 7.6.
Принцип работы вложенных циклов кроется в их названии. Все очень просто - один цикл вкладывается в другой. Например, для заполнения массива 10х10 случайными целыми числами от 1 до 10 можно написать такую программу (листинг 7.6.)
Dim MyArray(1 To 10, 1 To 10) For i = 1 To 10 For j = 1 To 10 MyArray(i, j) = Int(Rnd(1) * 10) Next j Next iЛистинг 7.6. Работа с массивом 10х10
Внешний цикл (i) выполняется один раз, после чего внутренний (j) - десять раз. За один проход внешнего цикла внутренний выполняет десять - заполняется первая строка массива (с индексами от 1,1 до 1,10) и т.д.






