close

Вход

Забыли?

вход по аккаунту

?

3011.Основы офисного программирования в MS Excel

код для вставкиСкачать
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«Оренбургский государственный университет»
Т. А. Черных,
Ю. В. Полищук,
А. В. Максименко
ОСНОВЫ ОФИСНОГО ПРОГРАММИРОВАНИЯ В
MS EXCEL
Рекомендовано Ученым советом федерального государственного бюджетного
образовательного
учреждения
высшего
профессионального
образования
«Оренбургский государственный университет» в качестве учебного пособия для
студентов, обучающихся по программам высшего профессионального образования
по направлению подготовки 050100.62 Педагогическое образование
Оренбург
2013
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
УДК 004.42 (075.8)
ББК 32.973-18я73
Ч49
Рецензент – кандидат педагогических наук, доцент А. Е. Шухман
Ч49
Черных, Т. А.
Основы офисного программирования в MS Excel : учебное пособие /
Т. А. Черных, Ю. В. Полищук, А. В. Максименко; Оренбургский гос.
ун-т. – Оренбург: ОГУ, 2013. – 121 с.
Учебное пособие представляет собой руководство к выполнению лабораторных работ по курсу «Практикум по решению задач на компьютере»,
содержит краткое описание основ программирования в среде VBA с примерами использования основных операторов, необходимых для выполнения
лабораторных работ. В пособии приводятся задания к лабораторным работам
и тестовые задания для проверки знаний.
Пособие предназначено для студентов, обучающихся по направлению
подготовки 050100.62 Педагогическое образование, профиль «Информатика».
УДК 004.42 (075.8)
ББК 32.973-18я73
c Черных Т. А., 2013
○
c Полищук Ю. В., 2013
○
c Максименко А. В., 2013
○
c ОГУ, 2013
○
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Содержание
Введение. . . . . . . . . . . . . . . . . . . . . . . . . .
1 Использование макросов в MS Excel . . . . . . . . . . .
1.1 Настройка MS Excel 2003 . . . . . . . . . . . . . . .
1.2 Настройка MS Excel 2007 . . . . . . . . . . . . . . .
2 Введение в программирование . . . . . . . . . . . . . .
2.1 Редактор Visual Basic . . . . . . . . . . . . . . . . .
2.2 Ввод текста программы . . . . . . . . . . . . . . . .
2.3 Запуск программы . . . . . . . . . . . . . . . . . . .
2.4 Вывод на экран сообщений . . . . . . . . . . . . . .
2.5 Ввод данных в программу . . . . . . . . . . . . . . .
2.6 Связь программы с ячейками текущего рабочего листа .
2.7 Запись длинных операторов . . . . . . . . . . . . . .
2.8 Присваивание переменной содержимого ячейки . . . .
2.9 Изменение содержимого ячейки . . . . . . . . . . . .
2.10 Получение справки об операторах . . . . . . . . . .
2.11 Типы данных VBA . . . . . . . . . . . . . . . . . .
2.12 Переменные . . . . . . . . . . . . . . . . . . . . .
2.13 Инструкции объявления переменных . . . . . . . . .
2.14 Константы . . . . . . . . . . . . . . . . . . . . . .
2.15 Массивы . . . . . . . . . . . . . . . . . . . . . . .
2.16 Программирование арифметических действий . . . .
2.17 Операторы сравнения чисел. . . . . . . . . . . . . .
2.18 Операторы для работы со строками . . . . . . . . . .
2.19 Оператор & . . . . . . . . . . . . . . . . . . . . . .
2.20 Функция InStr . . . . . . . . . . . . . . . . . . . .
2.21 Функция Mid . . . . . . . . . . . . . . . . . . . . .
2.22 Функция Split. . . . . . . . . . . . . . . . . . . . .
2.23 Функция StrConv . . . . . . . . . . . . . . . . . . .
3 Ветвления и циклы . . . . . . . . . . . . . . . . . . .
3.1 Типы условных операторов . . . . . . . . . . . . . .
3.2 Инструкция If...Then . . . . . . . . . . . . . . . . . .
3.3 Инструкция If...Then...Else . . . . . . . . . . . . . . .
3.4 Функция IIf . . . . . . . . . . . . . . . . . . . . . .
3.5 Инструкция Select Case . . . . . . . . . . . . . . . .
3.6 Функция Switch . . . . . . . . . . . . . . . . . . . .
3.7 Функция Choose . . . . . . . . . . . . . . . . . . . .
3.8 Операторы цикла . . . . . . . . . . . . . . . . . . .
3.9 Прерывание работы цикла . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
6
6
6
15
15
17
18
18
19
21
22
22
23
24
24
26
28
29
30
34
40
42
44
44
45
45
46
48
48
48
48
50
50
52
53
53
54
3
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.10 Инструкция For...Next. . . . . . . . .
3.11 Инструкции Do...Loop . . . . . . . .
4 Процедуры и функции . . . . . . . . . .
4.1 Определение процедур и функций . . .
4.2 Связь процедур и макросов . . . . . .
4.3 Описание процедур . . . . . . . . . .
4.4 Использование в процедуре инструкции
4.5 Аргументы процедуры . . . . . . . . .
4.6 Массив аргументов в процедуре . . . .
4.7 Вызов процедур Sub и Function . . . .
4.8 Передача аргументов в процедуры . . .
4.9 Выход из процедур и циклов . . . . . .
5 Использование пользовательских форм .
6 Отладка программ . . . . . . . . . . . .
6.1 Вывод данных в окно отладки . . . . .
6.2 Использование точек останова . . . . .
7 Лабораторные работы . . . . . . . . . .
7.1 Выбор варианта и оформление отчетов.
7.2 Лабораторная работа № 1 . . . . . . .
7.3 Лабораторная работа № 2 . . . . . . .
7.4 Лабораторная работа № 3 . . . . . . .
7.5 Лабораторная работа № 4 . . . . . . .
7.6 Лабораторная работа № 5 . . . . . . .
7.7 Лабораторная работа № 6 . . . . . . .
7.8 Лабораторная работа № 7 . . . . . . .
7.9 Лабораторная работа № 8 . . . . . . .
7.10 Лабораторная работа № 9 . . . . . . .
7.11 Лабораторная работа № 10 . . . . . .
Заключение . . . . . . . . . . . . . . . .
Алфавитный указатель терминов . . . . . .
Список использованных источников . . . .
Приложение А Пример оформления отчета
Приложение Б Тестовые задания . . . . .
Приложение В Карта ответов . . . . . . .
. . .
. . .
. . .
. . .
. . .
. . .
Static
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 54
. 55
. 58
. 58
. 58
. 59
. 59
. 60
. 61
. 62
. 62
. 63
. 64
. 72
. 72
. 73
. 76
. 76
. 77
. 77
. 78
. 81
. 83
. 84
. 85
. 85
. 87
. 89
. 94
. 95
. 98
. 99
. 104
. 120
4
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Введение
Visual Basic for Application (VBA) – это один из самых доступных языков
программирования, который представляет собой упрощенную реализацию языка программирования Visual Basic. Он интегрирован в линейку продуктов Microsoft Office,
а также во многие другие программные пакеты, такие как AutoCAD, SolidWorks,
CorelDRAW, Word-Perfect и ESRI ArcGIS и т.д.
VBA позволяет автоматизировать процессы выполнения различных операций и
пользовательских действий, конструировать профессиональные приложения, решающие сложные практические задачи.
Использование VBA совместно с возможностями электронных таблиц MS Excel
особенно эффективно, так как позволяет совмещать возможности электронных таблиц
с мощью языка программирования VBA.
Таким образом, изучение основ использования VBA рекомендуется всем студентам и специалистам инженерных профилей.
Пособие не претендует на полноту изложения материала. Оно может быть использовано в качестве справочника на начальном этапе изучения основ VBA и позволит познакомиться с его базовыми возможностями без привлечения дополнительной
литературы.
Самостоятельное выполнение лабораторных работ и тестовых заданий, приведенных в работе, позволяет закрепить знания языка VBA у обучающегося.
5
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1 Использование макросов в MS Excel
При работе в MS Excel часто возникает необходимость многократно выполнять
одну и ту же последовательность действий. В этом случае последовательность действий можно записать в виде макроса, определить ему имя, а также создать кнопку
на панели инструментов, при нажатии на которую макрос будет выполнен. Таким
образом, можно автоматизированно выполнять действия с помощью макроса.
Макрос – это программа, записанная на встроенном языке макропрограммирования Visual Basic. Для создания и редактирования макросов используется редактор
VBA, интегрированный в MS Excel. Visual Basic – язык, на котором записываются
макросы. Он представляет собой мощный макроязык программирования для пакета
Microsoft Office. Перед созданием макросов в среде MS Excel необходимо понизить
уровень безопасности и произвести ряд настроек для работы с элементами управления. Рассмотрим подробнее перечень действий, необходимых для организации работы
с макросами в MS Excel версий 2003 и 2007 на примере.
1.1 Настройка MS Excel 2003
Для MS Excel 2003 необходимо установить средний уровень безопасности. Для
этого требуется выполнить следующую последовательность действий, представленную на рисунках 1.1, 1.2. Теперь необходимо добавить панель Элементы управления. Для этого выполним действия, показанные на рисунках 1.3, 1.4.
Появившуюся панель с помощью мыши интегрируем в основное меню. Для
выполнения данной операции перетаскиваем с помощью мыши, удерживая левую
кнопку, панель в основное меню MS Excel (рисунок 1.4).
После завершения этих операций для использования VBA необходимо перезапустить MS Excel 2003.
1.2 Настройка MS Excel 2007
Для настройки MS Excel 2007 необходимо активировать вкладку Разработчик.
Это делается с помощью действий, показанных на рисунках 1.5, 1.6. После выполненных действий на ленте появится панель Разработчик (рисунок 1.7).
Для сохранения документа MS Excel 2007 с макросами необходимо при сохранении документа выбрать вариант Книга Excel с поддержкой макросов (рисунок 1.8).
После открытия документа MS Excel 2007 требуется активация макросов, если
они в документе присутствуют. Для этого необходимо нажать на кнопку Параметры,
затем в появившемся окне выбрать «Включить содержимое» (рисунок 1.9).
После выполнения данных действий запустятся макросы, хранящиеся в открываемом документе.
6
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 1.1 – Меню настройки уровня безопасности (MS Excel 2003)
Рисунок 1.2 – Определение уровня безопасности (MS Excel 2003)
7
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 1.3 – Выбор панели управления через меню (MS Excel 2003)
Рисунок 1.4 – Интеграция панели в основное меню (MS Excel 2003)
8
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 1.5 – Переход к настройке параметров (MS Excel 2007)
Рисунок 1.6 – Активация вкладки Разработчик (MS Excel 2007)
Рисунок 1.7 – Панель Разработчик (MS Excel 2007)
9
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 1.8 – Сохранение документа с поддержкой макросов (MS Excel 2007)
Рисунок 1.9 – Открытие документа с макросом (MS Excel 2007)
10
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Использование режима конструктора
Режим конструктора позволяет размещать элементы управления непосредственно на листе MS Excel. Активация режима конструктора осуществляется путем нажатия на кнопку Режим конструктора на панели Разработчик (рисунок 1.10).
После активации данного режима с помощью кнопки Вставить можно разместить любой из доступных элементов управления (рисунок 1.10).
В качестве примера разместим кнопку на листе. Для этого используя манипулятор мыши, перетащим изображение кнопки на лист. Будем использовать Элементы
ActiveX (рисунок 1.11).
Рисунок 1.10 – Переход в режим конструктора (MS Excel 2007)
Рисунок 1.11 – Размещение кнопки на листе (MS Excel 2007)
11
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Для определения свойств кнопки необходимо с помощью правой кнопки мыши
в режиме конструктора вызвать меню свойств (рисунок 1.12), в котором можно задать
свойства: название кнопки внутри программы (Name), надпись на кнопке (Caption)
и т.д.
Рисунок 1.12 – Размещение кнопки на листе (MS Excel 2007)
Изменим надпись на кнопке, поменяв значение свойства Caption на «Кнопка»,
и закроем окно свойств объекта, затем двойным нажатием левой клавиши мыши по
изображению кнопки перейдем в режим создания программ (режим VBA) (рисунок 1.13).
Создана процедура (Command1_Click), которая будет запускаться при нажатии
на кнопку. Пусть нужно создать программу, которая при нажатии на созданную кнопку выводит сообщение «Привет!». Для этого необходимо добавить соответствующую
команду вывода сообщения (MsgBox) следующим образом:
12
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1 P r i v a t e Sub CommandButton1_Click ( )
2 MsgBox ( " Привет ! " )
3 End Sub
Рисунок 1.13 – Окно проекта VBA (MS Excel 2007)
Для проверки работы программы выполняем следующие действия. Закрываем
окно VBA и выключаем режим конструктора, нажав на кнопку режим конструктора. Теперь можно использовать созданную кнопку. Результат работы программы
представлен на рисунке 1.14.
Рисунок 1.14 – Результат работы программы (MS Excel 2007)
13
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
С помощью аналогичных действий в MS Excel 2003 может быть сформирована
такая же программа.
Рассмотрим подробнее редактор Visual Basic, интегрированный в MS Excel, и
основные команды языка программирования VBA.
14
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2 Введение в программирование
2.1 Редактор Visual Basic
Запуск редактора Visual Basic в MS Excel осуществляется или с помощью
комбинации клавиш Alt+F11, или путем нажатия на кнопку Visual Basic на панели
Разработчик (рисунок 2.1).
Если на панели MS Excel отсутствует панель Разработчик, то для ее появления
необходимо выполнить действия, описанные на с. 6.
Рисунок 2.1 – Результат работы программы (MS Excel 2007)
После выполнения описанных действий откроется окно проекта Visual Basic
(рисунок 2.2). В случае необходимости вы можете разместить в данном окне различные окна и панели инструментов.
В качестве примера на рисунке 2.2 показано окно Visual Basic, содержащее
папки с объектами MS Excel и Формы.
В окне проекта отображается содержание открытого проектаVisual Basic. Его
можно использовать для получения быстрого доступа к необходимым модулям и
процедурам, а также для копирования или удаления модулей из проекта. По своим
функциям окно проекта напоминает программу Проводник Windows.
Каждый проект в окне представлен папками, содержащими различные виды
объектов:
– Объекты Microsoft Excel – рабочие листы, составляющие рабочую книгу, и
сама рабочая книга. Модуль для каждого из этих объектов создается автоматически.
– Формы – пользовательские окна диалога, создаваемые с помощью встроенных инструментов VBA для представления пользовательских данных. Каждая
форма содержит модуль VBA с кодом обработки событий.
– Модули – содержат большинство подпрограмм и функций, составляющих VBAприложение. Модуль создается при первой записи макроса в рабочей книге.
– Модули класса – собственные объекты, создаваемые и используемые в макросах.
15
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Панель инструментов Стандартная
Раскрывающийся список кнопок
Окно формы
Окно проекта
Панель
инструментов
Окно программы
Рисунок 2.2 – Окно редактора Visual Basic
Для открытия и закрытия папки в окне проекта нажмите значки «+» или «-»
соответственно.
Чтобы открыть окно программы для просмотра и редактирования выбранного в
окне проекта модуля, выделите этот модуль и дважды нажмите на нем левой клавишей
мыши (или нажмите клавишу F7).
Большая часть работ при программировании выполняется в окне программы.
На рисунке 2.3 показано окно программы с записанным текстом программы.
Основные элементы окна:
– Список объектов – в нем показан выбранный объект, содержащий код VBA. В
стандартном модуле таким объектом всегда будет Общая область (General).
– Список процедур и событий – в нем собраны все процедуры, доступные для
редактирования. На рисунке 2.3 изображено имя введенной программы.
– Разделитель – позволяет разделить окно программы на две части. Это бывает
полезно при просмотре, например, двух частей длинной программы.
– Поле отметок – содержит различные индикаторы, отмечающие состояние кода
16
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Список объектов
Поле меток
Представление процедуры
Список процедур и событий
Представление полного модуля
Рисунок 2.3 – Окно для ввода текста программы
во время редактирования и отладки.
– Кнопка представления процедуры – предназначена для выбора режима, при
котором в окне программы отображается только одна процедура.
– Кнопка представления полного модуля – предназначена для выбора режима,
при котором в окне программы отображаются все процедуры модуля независимо от его длины. Модуль можно просматривать с помощью полос прокрутки.
Для возврата из редактора Visual Basic в окно MS Excel можно нажать комбинацию клавиш Alt+F11 или выбрать в меню команду File → Close and Return to
Microsoft Excel.
2.2 Ввод текста программы
Текст программ MS Excel хранится в модулях. Для записи текста программы
выполните команду меню окна Visual Basic Insert → Module. В результате откроется
еще одно окно, в котором вводится текст программы (рисунок 2.3).
Создадим программу, которая выполнит сложение двух чисел и выведет результат на экран:
1 Sub Example ( )
2 a = 1: b = 2
3 c = a + b ’ Сложение
4 MsgBox c
5 End Sub
Название программы Example(). Слова Sub и End Sub называются ключевыми.
Текст комментария начинается с апострофа.
17
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
При вводе текста программы редактор Visual Basic анализирует вводимую информацию и, в зависимости от результата анализа, исправляет или добавляет необходимые служебные слова, помечает комментарии зеленым цветом, синтаксические
ошибки – красным, ключевые слова – синим.
В качестве альтернативного средства для добавления в программу дополнительных пояснений вместо апострофа вы можете использовать ключевое слово Rem,
например:
1 а = b + с : Rem Сложение
2 g = f * q : Rem Умножение
После ключевого слова Rem перед текстом примечания нужно вставить пробел.
2.3 Запуск программы
Для запуска программы выполните в окне Visual Basic команду Run → Run
Sub/UserForm. На экран будет выведено окно с цифрой «3».
Написанная программа появляется в списке макросов и для ее выполнения по
стандартной схеме можно назначить кнопку или быструю клавишу.
Например, чтобы назначить кнопку, размещенную на панели Быстрого доступа
для выполнения программы, необходимо проделать следующие действия.
Переходим к настройке параметров MS Excel для этого выполним команду
Кнопка «Office» → Параметры Excel, как это показано на рисунке 1.5.
В параметрах MS Excel выбрать Настройка (Настройка панели быстрого доступа), установить в меню Выбрать команды из: Макросы и Настройка быстрого
доступа: Для Example.xlsx, где Example.xlsx – название файла с макросом. Затем
необходимо выбрать требуемый макрос из списка в нашем примере Лист1.Example,
нажать на кнопку Добавить, затем – на кнопку ОК (рисунок 2.4).
После выполненных действий на панели Быстрого доступа появится дополнительная кнопка, при нажатии на которую будет выполнен макрос (рисунок 2.5).
Выполнение макроса может быть реализовано путем использования кнопки,
непосредственно размещенной на листе MS Excel.
2.4 Вывод на экран сообщений
Функция MsgBox позволяет вывести на экран непосредственно из программы
сообщение о результатах работы программы.
Рассмотрим пример ее использования:
1 Sub Сообщение ( )
2 MsgBox " Вывод ␣ п р о с т о г о ␣ т е к с т а "
3 End Sub
18
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 2.4 – Добавление кнопки на панель Быстрого доступа
Рисунок 2.5 – Запуск макроса через панель Быстрого доступа
В результате выполнения программы Сообщение() на экране MS Excel появляется
окно с сообщением «Вывод простого текста». Нажатие кнопки ОК закрывает окно.
Это простейший случай использования функции MsgBox. Более полную информацию
о ней вы сможете получить в справочной системе Visual Basic.
2.5 Ввод данных в программу
Вводить можно любые данные: текст, числа, даты. Составим простую программу ввода текста и проверки его правильности. Результаты проверки выведем на экран
с помощью функции MsgBox.
19
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Ввод данных в программу осуществляется с помощью специальной функции
InputBox. Она отображает на экране окно диалога для ввода информации и возвращает в программу введенную в этом окне информацию. Управление параметрами
окна диалога осуществляется с помощью аргументов этой функции: Message, Title,
Default. На рисунке 2.6 приведена программа, в которой используется только один
аргумент этой функции.
Рисунок 2.6 – Использование функции InputBox
В результате выполнения оператора программы на экране отображается окно диалога, в которое необходимо ввести текст. Это могут быть слова «Да» или
«Нет», как указано в подсказке, или совершенно произвольный набор символов. Любой набор символов, который вы введете с клавиатуры, будет присвоен переменной
MyValue. Чтобы просмотреть введенную информацию в переменной MyValue, используется оператор: MsgBox MyValue. В результате его работы на экране появится
окно с набором символов, который содержится в этой переменной.
Если использовать другие аргументы функции InputBox, то окно диалога для
ввода данных станет более информативным. Далее приведен листинг программы в
новом варианте:
1 Sub Vvod ( )
2 Dim Default As S t r i n g
3 Message = " Введите ␣ Да ␣ или ␣ Нет " ’ Подсказка что делать
4 Title = " Ввод ␣ данных " ’ З а г о л о в о к окна
5 Default = " Да " ’ З н а ч е н и е по умолчанию
6 MyValue = InputBox ( Message , Title , Default ) ’ Открываем
окно в в о д а
7 MsgBox MyValue ’ Показывает что в в е д е н о
8 End Sub
20
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
На рисунке 2.7 изображено новое окно для ввода данных. При выводе его на
экран по умолчанию введено значение «Да».
Рисунок 2.7 – Окно ввода данных при использовании функции InputBox
2.6 Связь программы с ячейками текущего рабочего листа
Для доступа к ячейкам текущего рабочего листа можно использовать команду
Cells или команду Range.
Рассмотрим возможности использования данных команд на примере. Реализуем
программы вычисления суммы двух чисел, которые расположены в ячейках листа MS
Excel. Внешний вид данной программы представлен на рисунке 2.8.
Активация данной программы осуществляется путем нажатия на кнопку с изображением «+». Размещение кнопки на листе и изменение на ней надписи рассмотрено
ранее на с. 11.
Код данной программы представлен следующим листингом:
1 P r i v a t e Sub CommandButton1_Click ( )
2 Range ( " F2 " ) = Cells ( 2 , 2 ) + Cells ( 2 , 4 )
3 End Sub
Для получения значений суммы чисел использована команда Cells. Для команды Cells нужно указать номер строки и столбца. Результат вычисления суммы
помещается в ячейку с помощью команды Range в качестве входного параметра, для
которой требуется передать номер ячейки. В примере результат выводится в ячейку
F2.
21
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 2.8 – Внешний вид программы сложения двух чисел
2.7 Запись длинных операторов
В случае длинных строк в программе Visual Basic не разбивает их на части, а
перемещает экран таким образом, чтобы вводимый текст был в поле зрения. Для переноса строки следует выполнить специальные действия (правило переноса строк):
– Ввести пробел.
– Ввести символ подчеркивания «_».
– Нажать клавишу Enter для перехода на следующую строку.
Рассмотрим оператор следующего вида:
1 MsgBox A1 & " ␣ + ␣ " & A2 & " ␣ = ␣ " & A3
Используя правило переноса, запишем этот оператор на пяти строках:
1 MsgBox A1 _
2
& " ␣+␣ " _
3
& A2 _
4
& " ␣=␣ " _
5
& A3
2.8 Присваивание переменной содержимого ячейки
Переменным можно присвоить не только числа и текст из ячеек рабочего листа,
но и формулы.
22
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Переменная в программе определяется с помощью имени, используя которое
можно получать значение переменной. Каждая переменная может хранить определенный тип данных. Например, переменная может хранить числовые данные (количество
товара) и строковые данные (наименование товара).
Рассмотрим пример, когда в ячейке B2 расположенной на Лист1 в книге с
названиемExample.xlsm записана формула вида = ПИ().
В программе Proba запишем операторы, которые возвращают отдельно значение и формулу. Текст программы представлен листингом:
1 Sub Proba ( )
2 MyValue = Range ( " B2 " ) . Value
3 MsgBox MyValue ’ Возвращает з н а ч е н и е
4 MyValue = Range ( " B2 " ) . Formula
5 MsgBox MyValue ’ Возвращает формулу
6 End Sub
Окна, возвращаемые программой, представлены на рисунке 2.9.
Рисунок 2.9 – Окна сообщений о выводе значений и формулы ячейки B2
2.9 Изменение содержимого ячейки
Из программы можно изменить содержимое нужной ячейки рабочей книги. В
такую ячейку можно записать любую информацию и, в частности, число, текст или
формулу.
Для примера механизма изменения содержимого ячеек рассмотрим программу:
1 Sub Proba1 ( )
2 MyValue = 51 ’ Ввод ч и с л а
3 Range ( " B2 " ) = MyValue
4 MsgBox Range ( " B2 " )
5 MyValue = " Проба " ’ Ввод текста
6 Range ( " C2 " ) = MyValue
7 MsgBox Range ( " C2 " )
8 MyValue = " =A2+B2 " ’ Ввод формулы
23
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
9 Range ( "D2" ) = MyValue
10 MsgBox Range ( "D2" ) . Formula
11 End Sub
Приведенная программа записывает в ячейку B2 число 51, текст Проба в ячейку C2
и формулу =A2+B2. Для удобства контроля поставим после каждого оператора ввода
информации вывод сообщения MsgBox о содержимом соответствующих ячеек. Окна
сообщений приведены на рисунке 2.10.
Рисунок 2.10 – Результаты работы программы Proba1
Обратите внимание, что в последнем операторе MsgBox добавлено значение
Formula. Если этого не сделать, в окне сообщения будет отображаться результат
вычисления по записанной формуле, а не формула.
2.10 Получение справки об операторах
Введите в программный модуль название функции или оператора, переместите
указатель на это слово и нажмите клавишу F1. Если слово введено правильно, действительно является ключевым или служебным и при этом вы не выделили ни одной
буквы этого слова, то появится подробная справка с примерами его использования.
Когда неизвестно, как правильно пишется слово, следует воспользоваться справочной системой Visual Basic. Она открывается командой Help → ? Справка по
Microsoft Visual Basic и содержит полное описание всех конструкций языка. Справочная система снабжена удобной функцией поиска. Не стоит забывать, что многие
ответы на вопросы можно найти, используя Интернет, например, поисковые системы,
например, Yandex или Google, а так же специализированные форумы по программированию в Visual Basic.
2.11 Типы данных VBA
Данные в Visual Basic могут иметь один из следующих типов: Boolean, Byte,
Integer, Long, Currency, Decimal, Single, Double, Date, String, Object, Variant, Тип,
определенный пользователем.
24
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Каждый тип данных характеризуется диапазоном допустимых значений и количеством байтов, требуемых для хранения значений. В следующей таблице 2.1 перечислены поддерживаемые Visual Basic типы данных, размеры и диапазоны.
Таблица 2.1 – Типы данных Visual Basic
Тип данных
Byte (байт)
Boolean (логический)
Integer (целое)
Long (длинное целое)
1
2
2
4
Размер
байт
байта
байта
байта
Диапазон значений
От 0 до 255
True или False
От -32768 до 32767
От -2147483648 до 2147483647
Single (с плавающей 4 байта
точкой обычной точности)
От -3,4x1038 до -1,4x10-45 и
от 1,4x10-45 до 3,4x1038
Double (с плавающей 8 байт
точкой двойной точности)
Currency (денежный)
8 байт
От -1,79x10308 до -4,94x10-324 и
от 4,94x10-324 до 1,79x10308
Date (даты и время)
8 байт
Object (объект)
4 байта
От -922337203685477,5808
до 922337203685477,5807
Дата – от 1 января 100 г. до 31 декабря
9999 г., время – от 0:00:00 до 23:59:59
Любой указатель объекта
10 байт + дли- От 0 до приблизительно 2109
на строки
16 байт + 1 Тип Variant может хранить любой
байт/символ
другой тип данных. Диапазон для данных типа Variant зависит от фактически сохраняемых данных. В случае
текста диапазон соответствует строковому типу; в случае чисел диапазон
такой, как у типа Double.
Тип данных, опре- Определяется Диапазон каждого элемента определяделяемый пользовате- элементами
ется его типом данных
лем (с помощью ключевого слова Туре)
String (строка переменной длины)
Variant
(универсальный)
Пользовательские типы данных
К этим типам данных относятся все типы, которые определены с помощью
ключевого слова Type.
Пример инструкции:
25
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1 Type MyTypeValue
2 MyFIO As S t r i n g ’ Для ФИО
3 MyBirthDate As Date ’Дата рождения
4 MyNumber As I n t e g e r
’ Для номера
5 End Type
Символы описания типов данных
Символами описания типов данных называются символы, добавляемые после последнего символа идентификатора переменной. Например, выражение вида:
MyValue% означает, что переменная МуValue типа Integer. Рассмотрим символы
описания типов данных, которые представлены в таблице 2.2.
Таблица 2.2 – Символы описания типов данных
Тип данных
Byte
Boolean
Integer
Long
Single
Double
Currency
Date
Object
String
Variant
Символ описания
Нет символа
Нет символа
%
&
!
#
@
Нет символа
Нет символа
$
Нет символа
2.12 Переменные
Переменная – это именованная область памяти, в которой могут храниться
различные данные, которые можно изменять во время выполнения программы. Для
работы с данными в Visual Basic используются переменные. Каждая переменная
должна иметь имя, которое начинающееся с буквы и содержащее не более 255 символов, и объявленный тип данных: Boolean, Byte, Integer, Long, Currency, Single,
Double, Date, String, Object, Variant. Точки или символы описания типа в имени не
допустимы. Указание типа данных для переменной необязательно.
Уровни объявления переменных
Переменные бывают трех уровней: локальные, модульные и общие. Локальные переменные действуют внутри отдельной процедуры или функции. Когда программа выполняется вне процедуры, где описаны переменные, их значения пропа26
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
дают. В примере программы Proba2 переменные var, var1, var2, var3 являются
локальными:
1 Sub Proba2 ( )
2 Dim var As S i n g l e , var2 As Double
3 var = S i n ( Application . Pi ( ) / 6 )
4 var1 = Application . Sinh ( 1 0 . 3 5 )
5 var2 = ( Exp ( 1 0 . 3 5 ) − Exp ( − 1 0 . 3 5 ) ) / 2
6 var3 = 625
7 MsgBox var & " ␣ " & var1 & " ␣ " & var2 & " ␣ " & var3
8 End Sub
Модульные переменные могут использоваться любой процедурой или функцией модуля. Для этого необходимо расположить строки с инструкциями перед всеми
подпрограммами данного модуля.
Рассмотрим пример программы:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Dim MySum , MyValue ’ Объявление модульных переменных
Sub Work ( )
Sumznach ’ Вызов процедуры
MsgBox MySum
Operstyp ’ Вызов процедуры
MsgBox MyValue
MsgBox TypeName ( MyValue )
End Sub
Sub Sumznach ( )
Dim var As S i n g l e , var2 As Double ’ Объявление локальных
переменных
var = S i n ( Application . Pi ( ) / 6 )
var1 = Application . Sinh ( 1 0 . 3 5 )
var2 = ( Exp ( 1 0 . 3 5 ) − Exp ( − 1 0 . 3 5 ) ) / 2
var3 = 625
MySum = var + var1 + var2 + var3
End Sub
Sub Operstyp ( )
Dim MyVar1 As Currency , MyVar2 As Currency ’ Объявление
локальных переменных
MyVar1 = 1400000
MyVar2 = 100
MyValue = MyVar1 + MyVar2
End Sub
В рассмотренном коде содержатся три процедуры Work, Sumznach и Operstyp.
27
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Модульными являются переменные MySum и MyValue. Переменные var, var1, var2,
var3 являются локальными в процедуре Sumznach. Переменные MyVar1 и MyVar2
являются локальными в процедуре Operstyp.
В коде программы использована функция TypeName, которая возвращает имя
типа данных для переданной ей переменной.
Общие переменные могут использоваться любой процедурой или функцией
любого модуля. Пример создания переменных данного вида:
1 P u b l i c MySum , MyValue ’ Объявление общих переменных
Для создания общих переменных используется команда Public. Имена создаваемых переменных должны быть уникальными.
2.13 Инструкции объявления переменных
Для объявления переменных применяются следующие инструкции: Dim, Private,
Public, Static, Option Explicit. Рассмотрим примеры объявления переменных:
1
2
3
4
5
6
7
8
9
10
11
Dim MyvarByte As Byte , _
MyvarBoolean As Boolean , _
Myvarlnteger As I n t e g e r , _
MyvarLong As Long , _
MyvarSingle As S i n g l e , _
MyvarDouble As Double , _
MyvarCurrency As Currency , _
MyvarDate As Date , _
MyvarObject As Object , _
MyvarString As S t r i n g , _
MyvarVariant As V a r i a n t
Вместо одного оператора Dim можно использовать два и более. Операторы
типа переменной As Byte, As Boolean и т.д. являются необязательными. Допускается
описание нескольких переменных в одной строке. Для задания типа данных надо
указать определенный тип для каждой переменной. Если в описании не указан тип
переменной, для нее устанавливается тип Variant.
При инициализации числовой переменной присваивается значение 0, строка переменной длины получает значение пустой строки , а строка фиксированной длины
заполняется нулями. Переменные типа Variant получают при инициализации значение Empty.
Инструкция Dim предназначена для описания типа данных переменной на
уровне модуля или процедуры, а инструкция Public используется для описания общих переменных на уровне модуля. Общие переменные могут использоваться в любой процедуре проекта. Если общая переменная описана в стандартном модуле или в
28
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
модуле класса, она может использоваться в любом проекте, в котором имеется ссылка
на проект, где описана эта переменная.
Правила использования инструкции Public аналогичны инструкции Dim.
Инструкция Private
Переменные, которые доступны только для процедур одного модуля, называются личными. Для объявления личных переменных на уровне модуля используется
инструкция Private.
Инструкция Static
Переменные уровня модуля и общие переменные сохраняют свои значения на
все время работы программы. Чтобы сохранить значение локальной переменной после выходы из процедуры или функции, ее следует объявить с помощью инструкции
Static. Переменные, объявленные с помощью инструкции Static, сохраняют свои значения в течение всего времени выполнения программы.
Инструкция Option Explicit
В языке Visual Basic тип переменной неявно объявляется при присвоении. Все
неявно описанные переменные имеют тип Variant. Переменные этого типа требуют больших ресурсов памяти по сравнению с другими типами. Программа работает
более эффективно, если для переменных явно описаны типы данных. Явное описание всех переменных уменьшает вероятность конфликтов и ошибок, связанных с
опечатками.
2.14 Константы
Константа отличается от переменной тем, что сохраняет постоянное значение
в течение выполнения программы. Константа может быть строкой, числовым значением или комбинацией других констант с арифметическими и логическими операторами. В именах констант запрещено использовать операторы Is, а также возведение
в степень.
Константы определяются с помощью инструкции Const, например следующим
образом:
1
2
3
4
Const
Const
Const
Const
LOG10 = 2 . 3 0 2 5 8 5 1
Родился As Date = " 1 8 . 0 9 . 1 9 8 0 "
myvalue As Byte = 13
fio = " Иванов ␣ Иван ␣ Иванович "
После описания константу нельзя модифицировать и присваивать ей новое значение. При описании общих констант уровня модуля ключевое слово Public должно
располагаться перед словом Const. Для явного описания личных констант перед инструкцией Const необходимо использовать ключевое слово Private.
29
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.15 Массивы
Рассмотрим набор последовательно пронумерованных элементов, имеющих
одинаковый внутренний тип данных. Такой набор называется массивом. Каждый
элемент массива имеет определяющий его уникальный номер (индекс). Изменение
одного элемента массива не приводит к изменению других элементов.
Массивы описываются с помощью инструкций Dim, Static, Private или Public.
Разница в объявлении переменных и массивов состоит в том, что для последних
необходимо указывать размеры. Массивы могут иметь фиксированное число элементов, такие массивы называются фиксированными. Возможна ситуация, когда при
описании вы не можете определить число элементов массива. В этом случае массив
объявляется как динамический. В отличие от фиксированного массива выделение
памяти под динамический массив осуществляется по мере добавления элементов
массива.
При необходимости сослаться на все элементы массива можно ссылаться на
массив как на единое целое. Вы можете также ссылаться на отдельные элементы
массива.
Начало индексации массива с 0 или 1 определяется оператором Option Base.
Если не указано Option Base 1, нижняя граница индексов массива равняется нулю.
Продемонстрируем описание одномерного массива Arr, хранящего информацию о
количестве пройденного пути в течении недели, т.е. количество элементов массива
Arr равно семи.
1 Sub Proba3 ( )
2 Dim Arr ( 7 ) ’ Объявляем массив и з н а ч е н и я элементов
3 Arr ( 1 ) = 1 0 : Arr ( 2 ) = 2 5 : Arr ( 3 ) = 15
4 Arr ( 4 ) = 1 0 : Arr ( 5 ) = 3 0 : Arr ( 6 ) = 35
5 Arr ( 7 ) = 15
6 MsgBox LBound ( Arr ) ’ Возврат нижней границы размерности
массива
7 MsgBox UBound ( Arr ) ’ Возврат в е р х н е й границы размерности
массива
8 MsgBox Arr ( 5 ) ’ Вывод з н а ч е н и я пятого элемента массива
9 End Sub
Функции LBound и Ubound возвращают нижнюю и верхнюю границы размерности массива соответственно. При Option Base 1 в окне сообщений появляются
значения 1 и 7, а также будет выведено значение пятого элемента массива 30. Если оператор Option Base отсутствует или его параметр равен 0, в окне сообщений
появляются значения 0 и 7. Таким образом массив будет состоять из 8 элементов.
Значение отдельного элемента указывается с помощью индекса.
Создание массива значений с помощью функции Array продемонстрировано в
30
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
следующем примере:
1
2
3
4
5
6
7
Option Base 1
Sub Proba4 ( )
mA = Array ( " a " , " b " , " c " , " d " , " e " )
mB = Array ( 1 0 , 2 0 , 3 0 , 4 0 )
MsgBox mA ( 4 )
MsgBox mB ( 3 )
End Sub
В окнах сообщений появятся значения элементов mА(4) и mВ(3) – d и 30 соответственно. Если инструкция Option Base отсутствует или присутствует с аргументом
0, в окнах сообщений появятся значения е и 40.
Указание нижней границы индексов
Для явного задания нижней границы индексов массива используется ключевое
слово To, как показано в следующих примерах:
1 Dim mA ( 1 To 3 6 5 ) As Currency
2 Dim mB ( 7 To 1 2 ) As S t r i n g
При таком описании массива использование переменной mB(6) приводит к
ошибке.
Многомерные массивы
В языке Visual Basic допускается описание массивов, имеющих до 60 размерностей. Наиболее часто на практике используются двух и трехмерные массивы. Пример
объявления трехмерного массива:
1 Dim MyArray ( 1 To 1 0 0 , 1 To 1 0 0 , 1 To 1 0 0 ) As S i n g l e
Двухмерный массив трактуется как матрица или таблица. Первый аргумент
описывает строки, а второй – столбцы. В следующей строке программы массив описывается как массив типа integer, имеющий 10 строк и 10 столбцов, с номерами от 1
до 10:
1 Option Base 1
2 Dim МуАrrау ( 1 0 , 1 0 ) As I n t e g e r
Элемент массива MyArray(2,7) находится на пересечении второй строки и седьмого столбца таблицы из 10 строк и 10 столбцов.
Для обработки многомерных массивов используется конструкция For . . . Next,
которая рассмотрена далее на с. 54.
Описание динамического массива
Динамический массив объявляется без указания размера. Все его размерности,
включая число измерений, можно изменять во время работы программы. Для описания динамического массива используются операторы Static, Dim, Private или Public
с пустыми скобками, как показано в следующем примере:
31
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1 Dim MyDynamicArray ( ) As S i n g l e
Изменение размеров массива
Изменение размеров массива происходит на уровне процедуры. Для этого применяется оператор ReDim. Если он применяется к массиву, который не был описан с
помощью операторов Private, Public или Dim без индексов размерностей, объявляется новый массив.
Изменение размера массива предполагает изменение его параметров:
– размерность;
– количество отдельных элементов;
– верхние или нижние границы индексов каждой размерности.
Оператор ReDim можно применять несколько раз для изменения размерности
одного и того же динамического массива, но при каждом новом использовании содержащиеся в массиве данные теряются.
Также оператор ReDim можно повторно использовать для изменения числа
элементов и размерности массива. Однако использование этого оператора для последующего изменения типа данных уже описанного массива не допускается, если тип
массива отличен от Variant.
Сохранение информации в массиве
При использовании ReDim с инструкцией Preserve для увеличения размера
массива информация в массиве сохраняется. В следующем примере показывается,
как можно увеличить массив MyDynamicArray на 7 элементов без потери текущих
значений элементов массива:
1 ReDim P r e s e r v e MyDinamicArray ( Ubound ( MyDynamicArray ) + 7 )
Здесь оператор UBound (MyDynamicArray) возвращает значение верхнего индекса массива MyDynamicArray.
При использовании ключевого слова Preserve можно изменить значение только последней размерности массива, но нельзя изменить число измерений. Если у
массива размерность равна 1, ее можно изменить, так как она является последней и
единственной размерностью. Изменить многомерный массив и сохранить при этом
его значения можно только при изменении величины его последней размерности.
Рассмотрим примеры работы с размерностями массивов с помощью следующего листинга:
1
2
3
4
5
6
Option Base 1
Sub Proba5 ( )
Dim MyDynamicArray ( )
ReDim MyDynamicArray ( 2 )
MyDynamicArray ( 1 ) = 10
MyDynamicArray ( 2 ) = 20
32
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
7
8
9
10
11
12
13
ReDim P r e s e r v e MyDynamicArray ( 3 )
MsgBox MyDynamicArray ( 2 )
ReDim MyDynamicArray ( 3 , 2 )
MyDynamicArray ( 3 , 2 ) = 30 + 20
ReDim P r e s e r v e MyDynamicArray ( 3 , 3 )
MsgBox MyDynamicArray ( 3 , 2 )
End Sub
Сообщение MsgBox MyDynamicArray(2) используется для сохранения старых
данных. Удалите слово Preserve и убедитесь, что данные не сохранились. При изменении массива оператором ReDim MyDynamicArray(3,2) пропадают данные массива
MyDynamicArray().
Оператор ReDim Preserve MyDynamicArray(3, 3) изменяет массив и сохраняет
старые данные.
Если переменная в операторе ReDim не описана на уровне модуля или на
уровне процедуры, оператор ReDim действует как оператор объявления. При создании в дальнейшем переменной с тем же именем этот оператор будет ссылаться на эту
последнюю переменную. При этом не обязательно возникнет ошибка компиляции, даже при наличии инструкции Option Explicit. Чтобы избежать подобных конфликтов,
не используйте оператор ReDim как оператор описания.
Инициализация массива и освобождение памяти
Инструкция Erase повторно инициализирует элементы массивов фиксированной длины и освобождает память, отведенную для динамического массива.
Инструкция Erase не освобождает память для массивов фиксированной длины,
а элементы таких массивов инициируются следующим образом:
– каждому элементу массива чисел присваивается значение 0;
– в массиве строк каждому элементу присваивается значение пустой строки;
– в массиве типа Variant каждому элементу присваивается значение Empty (пустой);
– в массиве объектов каждому элементу присваивается специальное значение
Nothing (ничего).
Erase освобождает память, используемую динамическими массивами. Перед
тем как вновь станет возможна ссылка из программы на динамический массив, необходимо переопределить размерность массива с помощью инструкции ReDim. Рассмотрим использование инструкции Erase для массивов разных типов фиксированной длины и динамических на примере следующей программы:
1
2
3
4
5
Option Base 1 ’ Объявление начала и н д е к с а ц и и массива
Sub Proba6 ( )
Dim MyIntArray ( 1 0 0 ) As I n t e g e r ’ Массив целых ч и с е л
Dim MyStrArray ( 1 0 0 ) As S t r i n g
’ Строки переменной длины
Dim MyStrFixArray ( 9 ) As S t r i n g * 10 ’ Строки длины 10
33
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Dim MyDynamicArray ( ) As Double ’ Динамический массив
ReDim MyDynamicArray ( 1 0 )
’ Занимает память
MyIntArray ( 1 ) = 1997
MyStrArray ( 1 ) = " длина ␣ т е к с т а ␣ п р о и з в о л ь н а я "
MyStrFixArray ( 1 ) = " длина ␣ т е к с т а ␣ фиксирована "
MyDynamicArray ( 1 ) = 3 . 1 4 1 5 9 2 6 5 3 6
MsgBox MyIntArray ( 1 )
MsgBox MyStrArray ( 1 )
MsgBox MyStrFixArray ( 1 )
MsgBox MyDynamicArray ( 1 )
Erase MyIntArray ’Каждый элемент становится равным 0
Erase MyStrArray ’В каждый элемент заносится пустая строка
Erase MyStrFixArray ’Каждый элемент становится равным 0
Erase MyDynamicArray ’ Освобождает память
MsgBox MyIntArray ( 1 ) ’В окне 0
MsgBox MyStrArray ( 1 )
’В окне пусто
MsgBox MyStrFixArray ( 1 ) ’В окне пусто
MsgBox MyDynamicArray ( 1 ) ’ Сообщение об ошибке
End Sub
–
–
–
–
–
–
В программе выполняются следующие действия:
объявляются массивы разных типов фиксированной длины и динамические;
распределяется память под динамический массив MyDynamicArray(10);
для последующей проверки в первые ячейки массивов вводятся данные подходящего типа;
данные выводятся на экран;
работает инструкция Erase для повторной инициализации элементов массивов
фиксированной длины и освобождения памяти, отведенной для динамического
массива;
выводятся значения первых элементов массивов после инициализации; сообщение об ошибке связано с тем, что память под массив на момент выполнения
оператора не выделена.
2.16 Программирование арифметических действий
Рассмотрим работу арифметических операторов. В слагаемых операндах типы
данных могут быть одинаковыми, но могут и отличаться друг от друга.
Результат при операциях с числами одинаковых типов имеет тот же тип, а при
выходе значений результата за допустимый диапазон значений появляется сообщение
об ошибке.
При различных типах данных операндов, если тип результата определен явно,
34
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
то результату присваивается этот тип. Исключение составляет тип Variant, который
устанавливается по умолчанию. В этом случае выбирается его подтип с наименьшим
диапазоном, в который попадает результат.
Если в действиях участвует значение Null, то результат имеет значение Null.
Значение Empty ведет себя как 0.
Рассмотрим работу операндов на примерах. Для сокращения места при описании примеров опустим описание типов переменных, они будут указаны в именах
переменных. Переменная Myvar имеет тип по умолчанию, то есть какой-нибудь из
подтипов Variant. В комментариях указан результат вычисления. Для вывода его на
экран, используйте оператор MsgBox.
Сложение
Обозначение оператора сложения: «+». Сложение х+у возвращает сумму чисел
х и у. Вместо чисел в сложении могут участвовать различные выражения, возвращающие число.
Если тип данных установлен по умолчанию, никаких проблем при сложении
не возникает. Когда в сложении участвуют переменные разных типов, тип результата
может измениться. Так при сложении чисел типа Single и Long результат имеет тип
Double.
Рассмотрим примеры сложения различных переменных:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
MyvarBoolean1 = True
MyvarBoolean2 = True
MyvarBoolean = MyvarBoolean1 + MyvarBoolean2 ’ Истина
MyvarBoolean1 = True
MyvarBoolean2 = False
MyvarBoolean = MyvarBoolean1 + MyvarBoolean2 ’ Истина
MyvarByte1 = Range ( "A1" ) ’ 105
MyvarByte2 = Range ( "A2" ) ’ 150
MyvarByte = MyvarByte1 + MyvarByte2 ’ 255
MyvarByte1 = Range ( "A1" ) ’ 105
MyvarByte2 = Range ( "A2" ) ’ 151
MyvarByte = MyvarByte1 + MyvarByte2 ’ Переполнение
MyvarDate1= Range ( " B1 " ) ’ 0 1 . 0 1 . 9 7
MyvarDate2 = 1 ’ 3 1 . 1 2 . 1 8 9 9
MyvarDate = MyvarDate1 + MyvarDate2 ’ 0 2 . 0 1 . 9 7
MyvarDate1 = Range ( " B1 " ) ’ 0 1 . 0 1 . 0 0
Myvar = 1 ’ 1
MyvarDate = MyvarDate1 + Myvar ’ 0 2 . 0 1 . 0 0
Вычитание
Обозначение операнда вычитания: «-». Вычитание х-у возвращает разность
чисел х и у. Выражение -f(x) изменяет знак числового выражения f(x).
35
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рассмотрим примеры вычитания различных переменных:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
MyvarDate1 = Range ( " B1 " ) ’ 0 1 . 0 1 . 9 9
MyvarDate2 = Range ( " B2 " ) ’ 3 0 . 0 6 . 9 7
Myvar = MyvarDate1 − MyvarDate2 ’ 550 Double
MyvarDate1 = Range ( " B1 " ) ’ 0 1 . 0 1 . 2 0 0 0
MyvarDate = 10 ’ 0 9 . 0 1 . 1 9 0 0
MyvarDate2 = MyvarDate1 − MyvarDate ’ 2 2 . 1 2 . 1 9 9 9
MyvarDatel = Range ( " B1 " ) ’ 0 1 . 0 1 . 9 9
Myvar = 1 ’ 1
MyvarDate = MyvarDate1 − Myvar ’ 3 1 . 1 2 . 9 8
Myvarlnteger1 = − 32669
Myvarlnteger2 = 100
Myvarlnteger = Myvarlnteger1 − Myvarlnteger2 ’ Переполнение
Myvarlnteger1 = − 32669
MyvarSingle = 100
Myvar = Myvarlnteger1 − MyvarSingle ’ − 32769 тип S i n g l e
Умножение
Обозначение оператора умножения: «*». Операция умножения х*у возвращает
произведение чисел х и у.
Рассмотрим примеры умножения различных переменных:
1
2
3
4
5
6
7
8
9
Myvarlnteger = 25677
MyvarByte = 100
MyvarDouble = Myvarlnteger * MyvarByte ’ Переполнение
Myvarlnteger = 230
MyvarByte = 135
MyvarVariant = Myvarlnteger * MyvarByte ’ 31050 I n t e g e r
Myvarlnteger = 23
MyvarByte = 3
Myvar = Myvarlnteger * MyvarByte ’ 69 I n t e g e r
Возведение в степень
Обозначение оператора возведения в степень выполняется с помощью символа:
«ˆ». Запись х ˆ у означает, что число х возводится в степень у. В качестве операндов
может быть любое числовое выражение.
Рассмотрим использования оператора возведения числа в степень:
1 MyValue = 2 ^ 2 ’ Возвращает 4
2 MyValue = 3 ^ 3 ^ 3 ’ Возвращает 19683
3 MyValue = ( − 5) ^ 3 ’ Возвращает −125
36
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Отрицательные значения операнда х допускаются только для целых значений
показателя степени. Стоящие рядом операторы возведения в степень выполняются
слева направо. Обычно результат имеет тип данных Double или Variant.
Последнее иллюстрирует следующий пример:
1 Myvarlnteger = 5
2 MyvarByte = 3
3 Myvar = Myvarlnteger ^ MyvarByte ’ 125 Double
Деление
Обозначение оператора деления: «/». Операция х/у возвращает частное отделения двух чисел х и у. Результат обычно имеет тип данных Double. Когда оба
операнда имеют тип Byte, Integer или Single тип результата устанавливается Single,
при условии, что частное не выходит за рамки допустимого для этого типа диапазона
значений.
Рассмотрим использования оператора деления:
1
2
3
4
5
6
MyvarInteger = 7
MyvarByte = 4
Myvar = MyvarInteger / MyvarByte ’ 1 . 7 5 S i n g l e
Myvar = 1 . 4 E+38
MyVar1 = 1 . 1 E−45
MyVar2 = Myvar / MyVar1 ’ 1 . 2 7 2 7 2 Double
Целочисленное деление двух чисел
Обозначение оператора целочисленного деления двух чисел: «∖». Операция х∖у
возвращает целую часть результата деления числа х на число у. Числа х и у предварительно округляются до целого по правилам округления. Целая часть результата
деления получается отбрасыванием дробной части, а не округлением, например:
1 MyValue = 20999 \ 1000
’ Возвращает 20
Дробная часть остатка равна 0.999, но она отбрасывается, а не округляется.
Поскольку результат есть целое число, то он имеет тип данных Byte, Integer,
Long или соответствующие подтипы типа Variant.
Деление по модулю
Обозначение оператора деления по модулю: «Mod». Операция х Mod у возвращает остаток от деления числа х на число у. Числа х и у предварительно округляются
до целого по правилам округления.
Рассмотрим примеры деления по модулю:
1
2
3
4
MyValue
MyValue
MyValue
MyValue
=
=
=
=
36
36
36
36
Mod
Mod
Mod
Mod
6 ’ Возвращает 0
6 . 1 ’ Возвращает 0
6 . 9 ’ Возвращает 1
7 ’ Возвращает 1
37
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
5
6
7
8
MyValue
MyValue
MyValue
MyValue
=
=
=
=
3 6 . 9 Mod
4 1 . 4 Mod
4 1 . 8 Mod
41 Mod 7
7 ’ Возвращает 2
6 . 9 ’ Возвращает 6
6 . 9 ’ Возвращает 0
’ Возвращает 6
Поскольку здесь остаток всегда есть целое число, результат имеет тип данных
Byte, Integer, Long или соответствующие подтипы типа Variant.
Рассмотрим более сложный пример, демонстрирующий использования операторов деления.
Пусть в активной ячейке текущего рабочего листа находится трехзначное число
abc, где буквы a, b и с – его десятичные цифры. Требуется определить эти цифры
и записать их в ячейки, расположенные справа от активной ячейки. Исходное число
записывается в следующем виде: abc = a*100+b*10+c
С помощью операции целого деления числа abc на 100 получим число а. Операция деления числа по модулю 10 возвращает остаток от деления – число с. Число
b получается как частное от обычного деления числа abc - a*100 - c на число 10.
Описанная программа реализуется следующим кодом:
1
2
3
4
5
6
7
8
9
10
Sub Proba7 ( )
Dim abc As I n t e g e r , a , b , c As Byte
abc = ActiveCell . Value
a = abc \ 100
c = abc Mod 10
b = ( abc − a * 100 − c ) / 10
ActiveCell . Offset ( 0 , 1 ) . Value = a
ActiveCell . Offset ( 0 , 2 ) . Value = b
ActiveCell . Offset ( 0 , 3 ) . Value = c
End Sub
Метод Offset управляет смещением адресов ячеек относительно активной ячейки. Выражение Offset(0,1) означает, что нет смещения по строкам и есть смещение на
1 по столбцам, то есть результат будет записан в первую ячейку справа от активной
ячейки.
Результат работы программы изображен на рисунке 2.11. Программа может
быть реализована без использования переменных:
1 Sub Proba8 ( )
2 ActiveCell . Offset ( 0 , 1 ) . Value = ActiveCell . Value \ 100
3 ActiveCell . Offset ( 0 , 2 ) . Value = _
4 ( ActiveCell . Value − ( ActiveCell . Value \ 1 0 0 ) * 100 _
5 − ActiveCell . Value Mod 1 0 ) / 10
6 ActiveCell . Offset ( 0 , 3 ) . Value = ActiveCell . Value Mod 10
7 End Sub
38
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 2.11 – Результат работы программы Proba7
Использование функций в формулах
В расчетах можно использовать следующие математические функции: Abs, Atn,
Cos, Exp, Fix, Int, Log, Rnd, Sgn, Sin, Sqr, Tan, Fact. Для получения справочной
информации о функциях введите название одной из них и нажмите клавишу F1.
Рассмотрим примеры использования функций:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub Proba9 ( )
var = Application . Pi ( )
var = S i n ( Application . Pi ( ) / 6 )
var = Cos ( Application . Pi ( ) / 3 )
var = Exp ( 1 )
var = Application . Sinh ( 1 0 . 3 5 )
var = ( Exp ( 1 0 . 3 5 ) − Exp ( − 1 0 . 3 5 ) ) / 2
var = Application . Cosh ( 0 . 5 )
var = ( Exp ( 0 . 5 ) + Exp ( − 0 . 5 ) ) / 2
var = Log ( 0 . 0 0 1 ) ’ логарифм по основанию 10
var = Log ( 1 0 ) / Log ( 2 ) ’ логарифм 10 по основанию 2
var = Sqr ( 6 2 5 )
var = Application . Fact ( 5 )
MsgBox var
End Sub
С помощью математических функций можно построить множество других
функций. Формулы для них можно найти в справочной системе MS Visual Basic.
Полезные команды при работе с ячейками
Определить номер строки последней заполненной ячейки в столбце 2 можно
следующим образом:
1 Sub LastRow ( )
2 iLastRow = ActiveSheet . Cells ( ActiveSheet . _
3 Rows . Count , 2 ) . End ( xlUp ) . Row
4 MsgBox " Последняя ␣ с т р о к а ␣ 2− го ␣ с т о л б ц а ␣ " & iLastRow
5 End Sub
Определить номер столбца последней заполненной ячейки в строке 2 можно
следующим образом:
39
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1 Sub LastColumn ( )
2 iLastColumn = ActiveSheet . Cells ( 2 , _
3 ActiveSheet . Columns . Count ) . _
4 End ( xlToLeft ) . Column
5 MsgBox " Последний ␣ с т о л б е ц ␣ 2−й ␣ строки ␣ " & iLastColumn
6 End Sub
2.17 Операторы сравнения чисел
К операторам сравнения чисел относятся следующие: <, <=, >, >=, =, <>. Операторы сравнения используются для сравнения двух числовых выражений и возвращают значения Истина, Ложь или Null.
Примеры использования операторов сравнения:
1
2
3
4
5
a = 1 0 : b = 11
myvalue0 = ( b < a )
myvaluel = ( 3 . 1 4 1 5
myvalue3 = ( True =
myvalue4 = ( Истина
’ Возвращает Ложь
= 3 . 1 4 1 5 ) ’ Возвращает Истина
Not False ) ’ Возвращает Истина
= Not Ложь ) ’ Возвращает Ложь
Логические операторы
В среде Visual Basic можно выполнять логические операции с помощью логических операторов конъюнкции, эквивалентности, импликации, отрицания, сложения.
Оператор And
Возвращает результат конъюнкции (логического умножения) двух выражений.
Результат имеет значение Истина только тогда, когда оба выражения имеют значение
Истина. Если хотя бы одно из них имеет значение Ложь, результат будет иметь
значение Ложь.
Когда оператор And применяется к двум числовым выражениям, происходит их
поразрядное сравнение и возвращается результат. Сравнение происходит следующим
образом:
1. число записывается в двоичной системе счисления, например, 10 = 1010, 18
= 10010;
2. при поразрядном сравнении единиц в разряд результата записывается 1 только тогда, когда в соответствующих разрядах в записи сравниваемых чисел находятся
единицы. Во всех остальных случаях в соответствующем разряде результата записывается 0.
Результатом сравнения чисел 10 и 18 с помощью оператора And будет число
0010 = 2.
Примеры использования оператора And:
40
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1 a = 1 0 : b = 1 1 : с = 1 3 4 : d = 200
2 myvalue0 = а < b And с < d ’ Возвращает з н а ч е н и е Истина
3 myvaluel = a And 18 ’ Возвращает ч и с л о 2
Оператор Eqv
Используется для проверки логической эквивалентности двух выражений. Возвращает значение Истина, когда оба выражения имеют одинаковое значение, и Ложь,
когда их значения различаются. Если хотя бы одно из выражений имеет значение Null,
то результат также имеет значение Null.
Когда оператор Eqv применяется к двум числовым выражениям, происходит
их поразрядное сравнение по следующему правилу: в разряд результата 1 заносится тогда, когда в соответствующих разрядах в записи чисел находятся одинаковые
величины; когда числа в разрядах разные, в соответствующем разряде результата
записывается 0.
Пример использования оператора Eqv:
1 a = 1 0 : b = 1 1 : с = 1 3 4 : d = 200
2 myvalue0 = а > b Eqv с < d ’ Возвращает з н а ч е н и е Ложь
Оператор Imp
Выполняет операцию логической импликации для двух выражений. Возвращает значение Ложь, когда первое выражение – Истина, а второе – Ложь. Во всех
остальных случаях возвращает значение Истина. Если хотя бы одно из выражений
есть Null, результат также есть Null.
Когда оператор Imp применяется к двум числовым выражениям, происходит их
поразрядное сравнение по правилу: в разряд результата записывается 0 только тогда,
когда в соответствующих разрядах в записи первого числа находится 1, а второго –
0; в остальных случаях в разряд результата записывается 1.
Пример использования оператора Imp:
1 a = 1 0 : b = 1 1 : с = 1 3 4 : d = 200
2 myvalue0 = а > b Eqv с < d ’ Возвращает з н а ч е н и е Ложь
Оператор Or
Выполняет операцию логического сложения для двух выражений. Если хотя бы
одно из двух выражений истинно, результат также будет иметь значение Истина.
Оператор False Or False возвращает Ложь. Оператор True Or Null возвращает
Истина.
Когда оператор Or применяется к двум числовым выражениям, происходит
их поразрядное сравнение по такому правилу: в разряд результата записывается 0
только тогда, когда в соответствующих разрядах записей аргументов находятся нули,
а в остальных случаях записывается 1.
Пример использования оператора Or:
41
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1 a = 1 0 : b = 1 1 : с = 1 3 : d = 20
2 myvalue0 = a > b Or c < d ’ Возвращает з н а ч е н и е Истина
3 myvalue1 = a Or 18 ’ Возвращает ч и с л о 26
Оператор Xor
Выполняет операцию исключающего ИЛИ для двух выражений и является
отрицанием оператора Eqv.
Оператор Not
Выполняет над выражением операцию логического отрицания. Если исходное
выражение было Истина, возвращается Ложь и наоборот, если исходное выражение
было Ложь, возвращается Истина. При исходном значении Null возвращается Null.
Когда оператор Not применяется к числовому выражению, происходит их поразрядное отрицание по правилу: в разряд результата записывается 0 только тогда,
когда в соответствующем разряде в записи числа находится 1, и, наоборот, в результат
записывается 1, когда в соответствующем разряде числа находится 0.
Примеры использования оператора Not:
1 Sub Proba10 ( )
2 a = 1 0 : b = 1 1 : с = False
3 myvalue0 = Not a < b ’ Возвращает з н а ч е н и е Ложь
4 myvaluel = Not с ’ Возвращает з н а ч е н и е Истина
5 myvalue2 = Not ( a Eqv 1 8 ) ’ Возвращает ч и с л о 24
6 End Sub
2.18 Операторы для работы со строками
Функции обработки и сравнения строк необходимы для решения многих задач.
Одна из них – редактирование строк. На практике возникает необходимость выделение символа, части слова из предложения, замены символа, вставки нового текста,
поиска и исправления ошибок.
Распространенной задачей на практике является сравнения строк. Важную роль
в сравнении строк играет инструкция Option Compare. Она применяется на уровне
модуля для задания используемого по умолчанию способа сравнения строковых данных: Binary или Text. Если модуль не содержит инструкцию Option Compare, по
умолчанию используется способ сравнения Binary.
Инструкция Option Compare Binary определяет возможность сравнение строк
с учетом регистра, например: А < В < Е < Z < а < b < е < z < Б < Л < Ш < б < л < ш.
Инструкция Option Compare Text задает сравнение строк без учета регистра
символов, поэтому в предыдущей строке А=а, B=b, Е=е, Z=z, Б=б, Л=л, Ш=ш, и
42
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
сортировка с такой инструкцией выдает следующий порядок: А < В < Е < Z < Б < Л
< Ш.
В таблице 2.3 приведен перечень основных функций обработки строк.
Таблица 2.3 – Функции обработки строк
Оператор или функция
Действие
&
Оператор конкатенации, объединения двух
строковых выражений в одно.
Asc(строка)
Определяет код первого символа в строке.
Chr(код_символа)
Получение символа, соответствующего указанному коду.
InStr(старт, исходная_строка, Определяет место вхождения подстроки в
искомая_подстрока)
строке с указанной позиции старт.
LCase(строка)
Преобразует строку к нижнему регистру.
Left(строка, длина)
Возвращает указанное число первых символов
строки.
Len(строка)
Определяет количество символов в строке.
LTrim(строка)
Возвращает строку без пробелов в начале строки.
Mid(строка, начало, [длина]) Возвращает из строки подстроку указанной
длины, начиная с заданной позиции. Если длина не указана, то возвращается вся подстрока,
начиная с заданной позиции.
Replace(строка, найти, заме- Заменяет в исходной строке один фрагмент на
нить)
другой.
Rigth(строка, длина)
Возвращает указанное число последних символов строки.
RTrim(строка)
Возвращает строку без пробелов в конце строки.
Space(количество)
Возвращает строку, содержащую указанное
число пробелов.
Split(строка, разделитель)
Возвращает массив строк, полученный в результате разделения заданной строки.
Str(число)
Представляет число в виде строки
StrComp(строка1, строка2)
Сравнивает две строки и возвращает значение:
«0» – если строки равны, «-1» – если строка1
меньше строки2, «1» – если строка1 больше
строки2.
43
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Продолжение таблицы 2.3
Оператор или функция
Действие
StrConv(строка, метод_пере- Конвертирует строку.
вода)
String(количество, символ)
Создает строку из указанного числа повторяющихся символов.
Trim(строка)
Возвращает строку без пробелов в начале и
конце строки.
UCase(строка)
Преобразует строку к верхнему регистру.
Val(строка)
Преобразует строку в число.
2.19 Оператор &
Самым простым строковым оператором является конкатенация, которая обозначается «&» и используется для объединения двух строковых выражений в одно.
Пример использования этого оператора:
1 Sub Proba11 ( )
2 а = " Иванов " : b = " Иван " : c = " Иванович "
3 res = а & " ␣ " & b & " ␣ " & c
4 MsgBox res
5 End Sub
Если каждый операнд является выражением со значением Null, результат имеет
значение Null. Если только одно выражение имеет значение Null, то при слиянии с
другой строкой это выражение рассматривается как пустая строка. Любая строка со
значением Empty также рассматривается как пустая строка.
2.20 Функция InStr
Функция InStr(pos, wstring, shb, compare) возвращает номер позиции первого
вхождения содержимого строки shb внутри строки wstring.
Аргумент pos – необязательный. Он указывает позицию, с которой начинается
каждый поиск. Если этот аргумент опущен, поиск начинается с первого символа строки. Указание аргумента pos является обязательным, если указан аргумент compare,
wstring – строковое выражение, в котором выполняется поиск, shb – строковое выражение, для которого ищется вхождение.
Аргумент compare – необязательный. Он указывает способ сравнения строк:
если 0, то – двоичное сравнение с учетом регистра, если 1, то посимвольное сравнение
без учета регистра. Если аргумент опущен, способ сравнения строк определяется
44
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
значением параметра инструкции Option Compare. Пример использования функции
InStr:
1 Sub Proba12 ( )
2 wstring = " Пробный ␣ т е к с т "
3 shb = " е к с "
4 res = I n S t r ( 1 , wstring , shb ) ’ Возвращает 10
5 MsgBox res
6 End Sub
В данном примере функция InStr используется для определения позиции первого появления строки «екс» внутри строки «Пробный текст». В результате возвращено число 10. Именно с десятой буквы содержимое строки shb входит в содержимое
строки wstring.
2.21 Функция Mid
Функция Mid (wstring, pos, length) возвращает строку, которая содержит заданное число length первых символов строки wstring, начиная с символа, находящегося
на позиции pos.
Параметр length является необязательным. Он указывает число возвращаемых
символов из строки wstring. Если значение length превышает число символов в
строке wstring, находящихся справа от позиции pos, возвращается вся строка.
В качестве примера воспользуемся функцией Mid для извлечения двух цифр
числа 1234567890, начиная с седьмой позиции. Текст программы:
1 Sub Proba13 ( )
2 res = 1234567890 ’ Число , и з которого и з в л е к а е м цифры
3 pos = 7
4 res = Mid ( res , pos , 2 ) ’ Возвращает д в е цифры и з r e s
5 MsgBox res
6 End Sub
2.22 Функция Split
Функция Split(expression, delimiter, limit, compare) возвращает одномерный
массив с типом данных variant (string), содержащий в качестве элементов найденные
подстроки.
Аргумент expression – обязательный. Это строка, которую нужно расщепить.
Если аргумент содержит нулевую строку, то возвращается пустой массив, т.е. массив
без элементов и данных.
45
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
delimiter – необязательный аргумент. Он задает символы типа string, которые
используются в качестве разделителя строки. Если аргумент опущен, то по умолчанию используется символ пробела. Если аргумент содержит нулевую строку, то
возвращается одноэлементный массив, содержащее целую строку.
limit – необязательный аргумент, содержащий число возвращаемых подстрок.
Если аргумент опущен или равен «-1», то обрабатывается вся строка.
compare – необязательный аргумент, определяет вид сравнения:
– vbUseCompareOption = -1 – используется по умолчанию метод сравнения,
заданный инструкцией Option Compare,
– vbBinaryCompare = 0 – двоичный метод сравнения (буквы разных регистров
считаются разными), vbTextCompare = 1 – текстовый метод сравнения (сравнение без учета регистров).
Рассмотрим использование функции на примере. Необходимо реализовать программу, которая из строки, хранящей дату рождения, выбирает число, соответствующее году рождения, умножает его на день рождения и выводит количество цифр в
полученном числе. То есть пусть дата рождения 10.03.1995, тогда программа должна
вывести 10*1995=19950 и число символов 5.
Рассматриваемая программа реализуется следующим кодом:
1 P r i v a t e Sub CommandButton1_Click ( )
2 Dim arr ( ) As S t r i n g ’ объявляем массив строк
3 Dim s As S t r i n g ’ объявляем переменную типа строка
4 s = Range ( " E6 " )
5 arr = Split ( s , " . " )
6 MsgBox " число ␣ = ␣ " & arr ( 0 ) & " ␣ * ␣ " & arr ( 2 ) & " ␣ = ␣ " & _
7 I n t ( arr ( 0 ) ) * I n t ( arr ( 2 ) ) & Chr ( 1 3 ) & _
8 " длина ␣ числа ␣ = ␣ " & Len ( S t r ( arr ( 0 ) ) * I n t ( arr ( 2 ) ) )
9 End Sub
При организации данной программы использована команда Split, которая разбивает строку с шифром на три отдельных строки по условию вхождения символа
«.», каждая из которых сохраняется в массив.
Таким образом, после применения команды Split получается массив строк,
состоящий из трех элементов. Первый элемент хранит «10», второй – «03», третий –
«1995».
Команда Chr(13) - вставляет в строку команду переноса строки.
2.23 Функция StrConv
Функция StrConv (wstring, conversion) возвращает преобразованную строку
wstring по правилу, которое определяется константой conversion.
46
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Некоторые допустимые значения аргумента conversion приведены в таблице 2.4.
Таблица 2.4 – Допустимые значения аргумента conversion
Константа
vbUpperCase
vbLowerCase
vbProperCase
Значение
Преобразует строку к верхнему регистру
Преобразует строку к нижнему регистру
Преобразует первую букву в каждого слова в строке
в прописную
Пример использования констант для преобразования текста:
1 Sub Proba14 ( )
2 res = " Пробный ␣ т е к с т "
3 res1 = StrConv ( res , vbUpperCase ) ’ПРОБНЫЙ ТЕКСТ
4 MsgBox res1
5 res2 = StrConv ( res1 , vbLowerCase ) ’ пробный текст
6 MsgBox res2
7 res3 = StrConv ( res2 , vbProperCase ) ’ Пробный Текст
8 MsgBox res3
9 End Sub
47
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3 Ветвления и циклы
3.1 Типы условных операторов
При написании программ необходимы средства для выполнения определенных инструкций в зависимости от выполнения или невыполнения заданных условий.
Инструкции или операторы Visual Basic, реализующие подобные разветвления программы, называются условными. Часть таких операторов начинается с ключевого
слова if, другие являются переключателями, то есть позволяют осуществить переход
к одному из условий.
Условные инструкции проверяют, имеет ли данное условие значение True или
False. В зависимости от результата указывается переход для последующего выполнения программы. Обычно условие является выражением, в котором сравниваются
значения переменных.
Выбор условной инструкции определяется решаемой задачей.
3.2 Инструкция If...Then
Наиболее простой условный оператор If...Then записывается в одной строке и
используется для проверки истинности выражения.
Однострочная форма допускает выполнение нескольких инструкций в результате проверки одного условия If...Then, но все инструкции должны находиться на
одной строке и разделяться двоеточием, как показано в следующем примере:
1 Sub Proba15 ( )
2 a = InputBox ( " Введите ␣ число " )
3 I f a < 10 Then MsgBox " Число ␣ < ␣ 10 "
4 End Sub
В этом примере выполняется проверка условия а < 10. Если введенное число а
меньше 10, то выводится сообщение.
3.3 Инструкция If...Then...Else
Рассмотрим случай, когда в зависимости от условия нужно выполнить две или
более различных команд. Для этих целей используется инструкция If...Then...Else.
Этот оператор можно использовать в строковой записи, например:
1 Sub Proba16 ( )
2 a = InputBox ( " Введите ␣ число " )
3 I f a < 10 Then MsgBox " Число ␣ < ␣ 10 " E l s e MsgBox " Число ␣ => ␣
10 "
4 End Sub
48
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Когда условие a < 10 истинно, то на экран выводится сообщение «Число < 10».
Если условие a < 10 ложно, то на экран выводится сообщение «Число => 10».
Более часто используется блоковая форма записи этого оператора:
1
2
3
4
I f . . . Then
Elself . . . Then
E l s e . . . Then
End I f
Особенности блоковой формы заключаются в следующем.
– Инструкция If должна быть первой инструкцией в строке.
– В блоке If допускается любое число предложений If, но ни одно такое предложение не может появляться после предложения Else;
– Компоненты Else, Elself и End If могут иметь перед собой только номер строки
или метку строки.
– Блок If должен заканчиваться инструкцией End If.
– После Then на той же строке может находиться только комментарий, иначе эта
инструкция рассматривается как однострочная инструкция If.
– Предложения Else и Elself являются не обязательными.
– Допускаются вложенные блоки инструкций If.
– При выполнении блока If проверяется условие. Если условие истинно, выполняются следующие за Then инструкции. Если условие ложно, то последовательно проверяется каждое условие Elself. Когда оно истинно, выполняются
инструкции, непосредственно следующие за соответствующим предложением
Then. Если каждое из условий Elself не является истинным или предложения Elself отсутствуют, выполняются инструкции, следующие за Else. После
выполнения следующих за Then или Else инструкций работа условного оператора заканчивается, и выполнение программы продолжается со следующей
после End If инструкции.
Рассмотрим пример использования инструкции в блоковой форме If...Then...Else
для организации диалога при вводе данных:
1 Sub Proba17 ( )
2 a = 1 0 0 0 : b = 1000 ’ Исходные данные
3 pr = InputBox ( " Введите ␣ процент ␣ от ␣ 0 ␣ до ␣ 100 " )
4 I f pr < 0 Or pr > 100 Then
5 pr = InputBox ( " Повторите ␣ ввод " )
6 E l s e I f 0 <= pr And pr < 20 Then b = a + a * pr / 1 0 0 :
MsgBox b & " ␣ Менее ␣ 20%"
7 E l s e I f 80 < pr And pr <= 100 Then b = a + a * pr / 1 0 0 :
MsgBox b & " ␣ Более ␣ 80%"
8 E l s e : b = a + a * pr / 1 0 0 : MsgBox b & " ␣ Норма "
49
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
9 End I f
10 MsgBox pr & " ␣ ␣ ␣ " & b
11 End Sub
Функция InputBox открывает окно для ввода данных. Все, что будет введено в этом окне, возвращается в переменную рr. После выполнения инструкции pr
= InputBox("Повторите ввод") сразу и независимо от введенного значения будет
выполнен оператор MsgBox pr & Space(20) & b. Это соответствует правилу использования конструкции If...Then...Else. Условие pr < 0 Or pr > 100 является ложным,
поэтому выполняются инструкции, следующие за Then, а затем осуществляется выход из блока.
3.4 Функция IIf
Функция IIf(cond, val_T, val_F) возвращает одно из двух значений val_T или
val_F – в зависимости от истинности выражения cond. В процессе выполнения функция IIf вычисляет оба выражения: val_T и val_F, но возвращает только одно из них.
Пример использования функции IIf:
1 Sub Proba18 ( )
2 pr = InputBox ( " Введите ␣ p r " )
3 res = I I f ( 8 0 > pr And pr < 1 0 0 , " Первое " , " Второе " )
4 MsgBox res
5 End Sub
В данном примере условие если условие выполнено, т.е. введено значение
80<pr<100, то на экран будет выведено сообщение «Первое» в противном случае
«Второе».
3.5 Инструкция Select Case
Если необходимо выполнять строго определенные действия в зависимости от
значения параметра, а общее число значений, которые может принимать этот параметр, достаточно велико, то можно использовать инструкцию Select Case. Например,
если значение параметра равно 10, нужно выполнить первую группу операции, если
равно 6 или 7 – вторую, а при значении 100 – третью и т.д. Наиболее просто осуществить это с помощью инструкции Select Case, которая предназначена для выполнения одной из нескольких групп инструкций, в зависимости от значения входного
выражения. Рассмотрим пример:
1 Sub Proba_SC ( )
2 var = 199
3 S e l e c t Case var
50
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
4 Case 1
5
MsgBox " Case ␣ 1 ␣ " & var
6 Case 2 , 3 , 4
7
MsgBox " Case ␣ 2 , ␣ 3 , ␣ 4 ␣ " & var
8
Case 4 To 10
9
MsgBox " Case ␣ 4 ␣ t o ␣ 10 ␣ " & var
10
Case 1 1 . 0 0 9 To 1 9 , 100 To 2 0 0 , 3 0 0 , 400
11
MsgBox " Case ␣ 1 1 . 0 0 9 ␣ To ␣ 1 9 , ␣ 100 ␣ To ␣ 2 0 0 , ␣ 3 0 0 , ␣ 400 ␣ " & var
12
Case Is > 1000
13
MsgBox " Case ␣ I s ␣ > ␣ 1000 ␣ " & var
14
Case E l s e
15
MsgBox " Case ␣ E l s e ␣ Другие ␣ з н а ч е н и я "
16 End S e l e c t
17 End Sub
Оператор Select Case анализирует значение входного выражения var и ищет
строку Case, удовлетворяющую значению 199. Это строка Case 11.009 То 19, 100
То 200, 300, 400. Затем выполняются инструкции, расположенные между соседними
строками Case. В примере это MsgBox "Case 11.009 To 19, 100 To 200, 300, 400 "&
var. В строках Case можно указывать как отдельные значения, так и целый диапазон
значений с помощью ключевых слов To и Is. Если установить значение var=1001, то
выполнится условие строки Case Is > 1000 и оператор MsgBox "Case Is > 1000 "&
var. Затем управление передается инструкции, следующей за End Select.
Строка Case Else не является обязательной. Она позволяет указать список инструкций, которые будут выполнены в том случае, если не обнаружено ни одного
совпадения или попадания в допустимый интервал значения переменной var.
Переменная в операторе Select Case может принимать строковые значения (например, при вводе фамилий).
Пользователь вводит свою фамилию и открывается его рабочая книга, как показано в следующем примере:
1 Sub Proba_SC2 ( )
2 var = InputBox ( " Введите ␣ фамилию : " )
3 S e l e c t Case var
4 Case " Иванов "
5
Workbooks . Open Filename : = "C : \ i v a n o v . x l s "
6 Case " Петров "
7
Workbooks . Open Filename : = "C : \ p e t r o v . x l s "
8 Case " Сидоров "
9
Workbooks . Open Filename : = "C : \ s i d o r o v . x l s "
10 Case E l s e
11
MsgBox " Case ␣ E l s e ␣ Фамилия ␣ в в е д е н а ␣ неверно "
51
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
12 End S e l e c t
Переменной var присваивается значение введенной пользователем строки с фамилией, например, Петров. Далее выбирается строка Case "Петров" и соответствующая команда, открывающая файл petrov.xls. Если фамилия введена неправильно
или ее нет в строках Case, то выполнится строка Case Else и оператор MsgBox "Case
Else Фамилия введена неверно".
При работе со строковыми выражениями допускается использование в каждой
строке Case нескольких строковых выражений и ключевых слов То и Is.
3.6 Функция Switch
Функция Switch позволяет выбрать одно значение из списка. Список ее аргументов содержит пары выражений и значений, как показано в следующем примере:
1 Res = S w i t c h ( Arg = элемент списка , значение , _
2
Arg = элемент списка , значение , _
3
Arg = элемент списка , значение )
Выражения Arg = элемент списка вычисляются в том порядке, в котором
они включены в список (слева направо). Возвращается значение, соответствующее
первому истинному выражению в списке.
Функция Switch возвращает значение Null, когда все равенства не выполняются
или первому истинному выражению соответствует значение, равное Null. Вычисляются все выражения, но возвращается только одно из соответствующих им значений,
и это может послужить причиной для ошибок.
Рассмотрим примеры. В примере функция Switch используется для определения числа по имени числительного. Например, имя числительного триста, функция
Switch возвращает число 300.
1 Sub Proba_sw1 ( )
2 nv = InputBox ( "Имя ␣ ч и с л и т е л ь н о г о " )
3 var = S w i t c h ( nv = " с т о " , 1 0 0 , _
4
nv = " д в е с т и " , 2 0 0 , _
5
nv = " т р и с т а " , 3 0 0 )
6 var = var & " " : MsgBox var
7 End Sub
Во втором примере введите название города Рим, функция Switch возвратит
название страны Италия по названию города.
1 Sub Proba_sw2 ( )
2 CityName = InputBox ( " Введите ␣ н а з в а н и е ␣ г о р о д а " )
3 var = S w i t c h ( CityName = " Лондон " , " Англия " , _
52
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
4
CityName = " Рим " , " Италия " , _
5
CityName = " Москва " , " Россия " )
6 var = var & " " : MsgBox var
7 End Sub
При вводе имени числительного или названия города возможны ошибки. В этом
случае Switch возвращает значение var = Null, а оператор MsgBox var возвращает
ошибку. Аналогичная ситуация происходит в том случае, когда все выражения в
Switch являются ложными. Поэтому вместо традиционного MsgBox var используется
следующая конструкция: Var = Var & ””: MsgBox Var. Когда var = Null, к значению
var добавляется пустая строка и MsgBox var выводит на экран пустую строку.
Сообщение об ошибке не отображается.
3.7 Функция Choose
Функция Choose (ind, arg1, arg2, ..., argN) возвращает значение, выбранное
из списка аргументов. Если индекс ind = 1, то возвращается первый элемент списка
arg1, если ind = 2, возвращается arg2 и т.д. Индекс может быть числовым выражением и принимать значения от 1 до числа, равного количеству элементов в списке.
Если вычисленное значение индекса не является целым числом, оно округляется до
ближайшего целого числа перед выполнением операции.
Функция Choose возвращает значение Null, если индекс меньше 1 или превышает число элементов в списке.
Пример программы выбора цифры:
1 Sub Proba_ch ( )
2 ind = InputBox ( " Цифра " )
3 Res = Choose ( ind + 1 , " нуль " , " один " , " два " , " три " , _
4 " четыре " , " п я т ь " , " шесть " , " семь " , " восемь " , " д е в я т ь " )
5 Res = Res & " " : MsgBox Res
6 End Sub
В данном примере функция Choose используется для выбора названия цифры,
которая передается в параметре ind. Оператор Res = Res & ”” добавлен для изменения
возвращаемого значения Null.
3.8 Операторы цикла
Использование в программе циклов обеспечивает многократное выполнение
набора инструкций. Циклы могут быть организованы различным образом:
– Do...Loop – повторяет набор инструкций, пока условие имеет значение True
или пока оно не примет значение True;
53
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
– For...Next – счетчик, повторяет набор инструкций указанное число раз;
– For Each...Next – повторяет набор инструкций для каждого объекта семейства.
При помощи условных операторов и инструкций цикла могут быть созданы
достаточно сложные программы на языке Visual Basic.
В качестве примеров использования операторов цикла рассмотрим следующие
задачи:
– вычисление количества символов в ячейках;
– просмотр содержимого ячеек области рабочего листа MS Excel;
– удаление лишних пробелов из каждой ячейки;
– суммирование содержимого ячеек различных рабочих листов.
3.9 Прерывание работы цикла
При использовании циклов существует опасность «зацикливания» программы,
то есть условие завершения цикла не выполняется, и цикл становится бесконечным. Прерывания выполнения программы осуществляется путем нажатия клавиш
Ctrl+Break.
В Visual Basic существует специальная инструкция выходя из цикла – Exit.
Строка Exit Do завершает выполнение цикла Do...Loop и передает управление оператору, следующему за инструкцией Loop, а строка Exit For завершает выполнение
цикла For...Next и передает управление инструкции, следующей за инструкцией Next.
При использовании во вложенных циклах инструкции Exit Do и Exit For передают управление циклу, внешнему по отношению к циклу, в котором они вызываются.
3.10 Инструкция For...Next
Оператор цикла For...Next используется в тех случаях, когда известно сколько
раз необходимо выполнить цикл, или когда известны начальное и конечное значения
параметра цикла. В качестве примера рассмотрим цикл, в котором в ячейках области
текущего рабочего листа удаляются крайние пробелы:
1 Sub Proba19 ( )
2 n_row = 2
3 For n_col = 3 To 11 Step 2
4
Cells ( n_row , n_col ) = Trim ( Cells ( n_row , n_col ) )
5 Next n_col
6 End Sub
Переменная n_col выполняет роль счетчика. Используемая в качестве счетчика
цикла числовая переменная не может принадлежать к типу Boolean или быть элементом массива. В операторе For n_col = 3 То 11 Step 2 указывается начальное и
конечное значения счетчика (в данном случае 3 и 11).
54
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Шаг цикла step определяет значение, на которое изменяется счетчик при каждом выполнении тела цикла (в данном случае 2). Шаг может быть как положительным, так и отрицательным числом. Если шаг не задан, его значение принимается
равным единице.
Все инструкции между операторами For и Next называются телом цикла. После выполнения всех инструкций тела цикла значение Step добавляется к текущему
значению счетчика. Если счетчик не достигает конечного значения, выполняются
инструкции цикла. При достижении или превышении счетчиком конечного значения цикл завершается, и выполнение программы продолжается с первой инструкции,
следующей за Next.
Допускается организация вложенных циклов For...Next, при этом счетчики каждого цикла должны иметь различные имена. В следующем примере рассматривается
трехуровневый цикл:
1 Sub Proba20 ( )
2 sum_b = 0
3 For l = 1 To 3 ’ Выбор листа
4
For i = 2 To 13 ’ Выбор строки
5
For j = 2 To 8 Step 2 ’ Выбор столбца
6
sum_b = sum_b + _
7
Workbooks ( " demo . x l s " ) . Worksheets ( l ) . Cells ( i , j )
8
Next j
9
Next i
10
MsgBox sum_b
11 Next l
12 End Sub
В приведенной программе вычисляется сумма значений ячеек, расположенных
на пересечении строк с номерами от 2 до 13, и столбцов В, D, F, Н трех листов
рабочей книги demo.xls. Книга должна быть открыта, но не обязательно активна.
3.11 Инструкции Do...Loop
Существуют две основные формы инструкции Do...Loop: Do...While и Do...Until.
Цикл Do...While выполняется, пока выполняется определенное условие.
Цикл Do...Until – наоборот до тех пор, пока условие не будет выполнено.
Рассмотрим пример:
1 Sub Proba21 ( )
2 Dim lens ( 2 To 1 0 )
3 n_row = 2 : n_col = 3
4
Do While n_row <= 10
55
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
5
lens ( n_row ) = Len ( Cells ( n_row , n_col ) )
6
n_row = n_row + 1
7
Loop
8 MsgBox n_row
9 End Sub
Пока выполняется условие n_row <= 10, работают операторы тела цикла. Вычисляется количество символов в ячейке Cells(n_row, n_col) и записывается в элемент
массива lens (n_row). Счетчик n_row = n_row + 1 увеличивает номер строки на 1.
Ключевое слово Loop указывает на границу цикла. После него управление
передается в начало цикла. Как только условие n_row <= 10 перестает выполняться,
оператор цикла заканчивает работу, и управление передается следующему за Loop
оператору MsgBox n_row.
Такой же цикл можно записать с помощью инструкции Do. . . Until:
1 Sub Proba22 ( )
2 Dim lens ( 2 To 1 0 )
3 n_row = 2 : n_col = 3
4 Do U n t i l n_row > 10
5
lens ( n_row ) = Len ( Cells ( n_row , n_col ) )
6
n_row = n_row + 1
7 Loop
8 MsgBox n_row
9 End Sub
При такой записи операторы тела цикла работают до тех пор, пока условие
n_row > 10 не выполняется, то есть при n_row <= 10.
В конструкциях Do...While и Do...Until тело цикла выполняется только после
проверки условия и, если условие не выполняется уже на первом шаге, ни один
оператор тела цикла не будет выполнен. В некоторых случаях требуется выполнение
операторов тела цикла до проверки условия, то есть вначале выполняются операторы
тела цикла, а затем проверяется условие цикла. Пример использования цикла данного
вида для примера, рассмотренного ранее:
1 Sub Proba23 ( )
2 Dim lens ( 2 To 1 0 )
3 n_row = 2 : n_col
4 Do
5
lens ( n_row ) =
6
n_row = n_row
7 Loop While n_row
8 MsgBox n_row
9 End Sub
= 3
Len ( Cells ( n_row , n_col ) )
+ 1
<= 10
56
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Или такой вариант:
1 Sub Proba24 ( )
2 Dim lens ( 2 To 1 0 )
3 n_row = 2 : n_col = 3
4 Do : lens ( n_row ) = Len ( Cells ( n_row , n_col ) )
5
n_row = n_row + 1
6 Loop U n t i l n_row > 10
7 MsgBox n_row
8 End Sub
Как правило, ситуация использования циклов с проверкой в конце возникает
при организации запросов ввода паролей, фамилий, отдельных значений. Рассмотрим
пример программы с циклом для ввода фамилий:
1 Sub Proba25 ( )
2 Do
3 var = InputBox ( " Введите ␣ фамилию : " )
4
S e l e c t Case var
5
Case " Иванов "
6
Workbooks . Open ( "C : \ i v a n o v . x l s " )
7
Sign = True
8
Case " Петров "
9
Workbooks . Open ( "C : \ p e t r o v . x l s " )
10
Sign = True
11
Case " Сидоров "
12
Workbooks . Open ( "C : \ s i d o r o v . x l s " )
13
Sign = True
14
Case E l s e
15
MsgBox " Повторите ␣ ввод "
16
Sign = False
17
End S e l e c t
18 Loop U n t i l Sign
19 End Sub
Цикл Do...Loop Until выполняется до тех пор, пока не будет правильно введена
фамилия. Когда фамилия вводится с ошибками и она отсутствует в строках Case,
управление передается строке Case Else и выполняются операторы MsgBox "Повторите ввод" и Sign = False после этого оператор Loop Until Sign передает управление
на начало цикла, позволяя повторить ввод фамилии.
При правильном вводе фамилии переменной Sign присваивается значение True,
и управление передается на строку Loop. Цикл заканчивает свою работу.
57
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
4 Процедуры и функции
В языках программирования высокого уровня используется два типа подпрограмм: процедуры и функции.
Функция – это подпрограмма специального вида, которая кроме получения
параметров выполнения действий и передачи результатов работы через параметры
имеет ещё одну возможность – она может возвращать результат. Вызов функции
является, с точки зрения языка программирования, выражением, он может использоваться в других выражениях или в качестве правой части присваивания.
Процедура - это любая подпрограмма, которая не является функцией.
4.1 Определение процедур и функций
Процедурой (Sub) или функцией (Function) называется последовательность инструкций языка Visual Basic, ограниченных парами ключевых слов, соответственно:
Sub...End Sub или Function...End Function.
Процедуры Sub и Function могут иметь аргументы. Если процедуры не имеют
аргументов, они должны содержать пустые скобки и записываться в виде: Sub()
и Function(). В описаниях процедур аргументы всегда являются константами или
переменными, но при вызове вместо аргументов могут быть использованы выражения
или функции.
4.2 Связь процедур и макросов
Процедуры без аргументов воспринимаются MS Excel как макросы. Имя такой
процедуры появляется в списке макросов, и для ее выполнения достаточно просто
запустить соответствующий макрос.
Для запуска процедуры без аргументов из окна модуля необходимо переместить
курсор на какой-нибудь оператор процедуры и выполнить команду Run. Для запуска
процедуры с аргументами необходимо создать процедуру без аргументов. Например,
для запуска процедуры следующего вида:
1 Sub Proba ( arg1 , arg2 , arg3 )
2 MsgBox " p r o b a "
3 MsgBox arg1 & arg2 & arg3
4 End Sub
можно создать такую процедуру для ее запуска:
1 Sub StartProba ( )
2 Proba 1 1 1 1 1 , 2 2 2 2 2 , 33333
3 End Sub
58
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Для функции вида:
1 F u n c t i o n ProbaFun ( arg1 , arg2 , arg3 )
2 MsgBox " p r o b a F u n "
3 MsgBox arg1 & arg2 & arg3
4 End F u n c t i o n
процедура ее запуска будет выглядеть следующим образом:
1 Sub StartProbaFun ( )
2 ProbaFun 1 1 1 1 1 , 2 2 2 2 2 , 33333
3 End Sub
Процедуры Sub StartProba() и Sub StartProbaFun() являются макросами, поэтому им можно назначить кнопки и клавиши быстрого вызова. Таким образом,
любую процедуру можно выполнить непосредственно с листа рабочей книги.
Рассмотрим пример функции, возвращающей значение в программу:
1
2
3
4
5
6
7
8
F u n c t i o n add_10 ( arg As I n t e g e r )
add_10 = arg + 10
End F u n c t i o n
Sub Proba26 ( )
Dim a As I n t e g e r
a = 1
MsgBox add_10 ( a )
End Sub
В данном примере использована функция add_10, которая принимает на вход
один аргумент (целое число) к которому прибавляется число 10. Работа функции
add_10 продемонстрирована в процедуре. В результате выполнения процедуры на
экран будет выведено сообщение с числом 11.
4.3 Описание процедур
Инструкции Sub и Function описывают имя и аргументы процедуры. Перед
инструкциями могут находиться ключевые слова Private, Public, Static. Наличие
в описании ключевого слова Public делает процедуру доступной для всех других
процедур во всех модулях, a Private указывает на доступность для других процедур
только того модуля, в котором она описана.
4.4 Использование в процедуре инструкции Static
Инструкция Static используется для сохранения значений локальных переменных между вызовами процедуры и не действует на описанные вне процедуры пере59
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
менные, даже если они используются в процедуре.
Рассмотрим пример использования инструкции Static в процедуре:
1
2
3
4
5
6
7
8
9
10
11
P r i v a t e S t a t i c Sub ProbaS ( i , j )
Dim a , b
MsgBox " i = " & i & " ␣ j = " & j & " ␣ a= " & a & " ␣ b= " & b
a = i + j
I f a > 100 Then b = 777
MsgBox b
End Sub
Sub StartProbaS ( )
ProbaS 1 1 1 1 1 , 22222
ProbaS 1 1 , 22
End Sub
При первом запуске процедуры Sub ProbaS(i, j) с параметрами i=11111 и
j=22222 на экране появится сообщение. Оно показано слева на рисунке 4.1. Значения
а и b еще не определены. После окончания работы программы значения а и b уже
определены, а=33333 и b=777. При повторном запуске процедуры Sub ProbaS(i, j) с
параметрами i=11 и j=22 будет выдано сообщение которое приведено на рисунке 4.1
справа. Переменные а и b сохраняют свои значения, вычисленные при предыдущем
запуске.
Рисунок 4.1 – Сообщения при запуске программы ProbaS
4.5 Аргументы процедуры
Аргументы процедуры помещаются в круглых скобках сразу за названием процедуры и разделяются запятыми. Тип переменных может быть описан в этой же
строке.
1 Sub Proba ( arg1 As I n t e g e r , arg2 As S t r i n g , arg3 As
Boolean )
Если аргумент необязательный при вызове, перед ним следует ввести ключевое слово Optional. Он должен иметь тип Variant. Необязательные аргументы лучше
60
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
располагать в конце списка, так как все последующие аргументы автоматически становятся необязательными.
Наличие перед аргументом ключевого слова ByVal говорит о том, что этот
аргумент передается по значению. Описание ByRef используется в Visual Basic по
умолчанию и указывает, что аргумент, который находится после этого слова, передается по ссылке.
4.6 Массив аргументов в процедуре
Для задания произвольного количества аргументов в процедуре используется
ключевое слово ParamArray. Оно вводится перед последним аргументом в списке и указывает, что последний аргумент является массивом значений типаVariant,
описанный как Optional. Пример:
1
2
3
4
5
6
7
Sub StartProbaParamArray ( )
ProbaParamArray " P r o b a ␣ P a r a m A r r a y " , 1 0 , 2 0 , 3 0 , 40
End Sub
Sub ProbaParamArray ( arg As S t r i n g , ParamArray MyArray ( ) )
MsgBox arg
MsgBox MyArray ( 0 ) & MyArray ( 1 ) & MyArray ( 2 ) & MyArray ( 3 )
End Sub
В этом примере осуществляется передача в процедуру ProbaParamArray значений 10, 20, 30, 40. Значения передаются в массив МуАrrау.
Массив аргументов в процедуре можно описать и явным образом с указанием
типа, например:
1 Sub StartProbaArray ( )
2 Dim qq ( 5 ) As I n t e g e r
3 qq ( 1 ) = 1 0 : qq ( 2 ) = 2 0 : qq ( 3 ) = 3 0 : qq ( 4 ) = 4 0 : qq ( 5 ) =
50
4 ProbaArray " P r o b a A r r a y " , qq ( )
5 End Sub
6 Sub ProbaArray ( arg As S t r i n g , MyArray ( ) As I n t e g e r )
7 MsgBox arg
8 MsgBox MyArray ( 1 ) & MyArray ( 2 ) & MyArray ( 3 ) & MyArray ( 4 )
& MyArray ( 5 )
9 End Sub
В процедуре StartProbaArray описан массив qq, имя которого передается процедуре ProbaArray. Вывод на экран командой MsgBox это подтверждает. В процедуре ProbaArray массив MyArray описан как массив целых чисел.
61
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
4.7 Вызов процедур Sub и Function
Вызов процедуры осуществляется путем указания ее имени и значений всех
требуемых аргументов, отделенных друг от друга запятыми. Для вызова процедуры
можно использовать ключевое слово Call. При этом аргументы должны быть заключены в скобки. Для процедур без аргументов скобки не нужны.
Рассмотрим примеры вызовов процедур Sub и Function с помощью следующего листинга программы:
1 Dim res , a , b , с As S t r i n g
2 a = " " : b = " " : с = " ␣ 7"
3 res = three ( a , b , c , 2 ) ’ Вызов функции ( F u n c t i o n )
4 three a , b , c , 2 ’ Вызов процедуры ( Sub )
5 C a l l three ( a , b , c , 2 ) ’ Вызов процедуры ( Sub )
6 transformation ’ Вызов процедуры ( Sub )
7 C a l l transformation ’ Вызов процедуры ( Sub )
8 End Sub
При использовании инструкции Call для вызова функции (Function) значение,
возвращаемое функцией, теряется.
Вызов процедуры, находящейся в другом модуле проекта, осуществляется аналогично вызову процедуры в активном модуле. Если эти модули проекта содержат
процедуры с одинаковыми именами, то необходимо явно указать имя модуля в инструкции вызова процедуры:
1 Sub Proba_call ( )
2 Module1 . transformation
3 End Sub
В данном примере процедура transformation находится в модуле Module1.
4.8 Передача аргументов в процедуры
Аргументы в процедуру передаются по ссылке или по значению. Если включить в описание процедуры перед аргументом ключевое слово ByVal, то этот аргумент будет передан в процедуру по значению. По умолчанию аргументы передаются
в процедуры по ссылке.
При передаче аргументов по ссылке в процедуру передаются адреса аргументов, а не их значения. В результате в процедуре становится возможным изменение
реального значения переменной. Для передачи аргумента по ссылке требуется 4 байта. Время передачи аргумента и объем памяти зависят от типа данных аргумента.
При передаче в процедуру значения аргумента происходит следующее. В процедуре создается копия исходной переменной, поэтому изменения аргумента, сделанные
62
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
в этой процедуре, не распространяются на значение исходной переменной.
4.9 Выход из процедур и циклов
Инструкция Exit завершает выполнение процедур и функций. Данная инструкция используется для окончания работы циклов Do...Loop, For...Next в виде операторов: Exit Function, Exit Sub, Exit Do, Exit For.
Операторы Exit Sub или Exit Function немедленно завершают выполнение
процедур Sub или Function, в которых появляются эти операторы. Выполнение программы продолжается с первой инструкции, следующей за той, в которой вызывалась
процедура Sub или Function.
Инструкция Exit Do передает управление инструкции, следующей за инструкцией Loop. При использовании во вложенных циклах Do...Loop инструкция Exit Do
передает управление первому внешнему циклу по отношению к тому, в котором она
вызывается.
Инструкция Exit For применяется в циклах For...Next или For Each...Next.
Она передает управление инструкции, следующей за инструкцией Next. При использовании вложенных циклов управление передается первому внешнему циклу по
отношению к циклу, в котором инструкция вызывается.
63
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
5 Использование пользовательских форм
Для создания программ повышенной сложности в могут быть использованы
пользовательские формы. Их применение позволяет создавать продвинутый пользовательский интерфейс за счет использования различных компонентов управления,
например, выпадающих меню и т.д.
Рассмотрим пример создания пользовательской формы, которая активируется
по нажатию кнопки, размещенной на листе MS Excel.
После создания кнопки на листе необходимо в режиме VBA создать форму. Для
выполнения данной операции с помощью нажатия правой кнопки мыши в области
проекта требуется в открывшемся меню выбрать Insert → UserForm (рисунок 5.1).
После выполненной операции в проекте будет создана новая форма с названием
UserForm1 (рисунок 5.2).
Разместим на созданной форме текст, используя компонент Label. Для этого
выведем на экран меню с компонентами, нажав на кнопку Toolbox (рисунок 5.3).
С помощью мыши перенесем компонент на форму и настроим его свойства.
Для настройки свойств вызываем с помощью правой кнопки мыши меню свойств
(рисунок 5.4). Созданный Label будет иметь название Label1, которое может быть
скорректировано через меню свойств объекта (рисунок 5.5).
Меню свойств компонента Label аналогично уже рассмотренному нами ранее. Определим для Label размер шрифта с помощью меню свойств на закладке
Categorized. Корректируем свойства Font. В появившемся диалоговом меню определяем размер и вид шрифта. Установим шрифт размера 24 и скорректируем размер
компонента на форме с помощью мыши.
Теперь перейдем к созданию программы. Предположим, что необходимо запросить слово у пользователя, а затем показать его на форме. Это реализует следующий
программный код:
1 P r i v a t e Sub CommandButton1_Click ( )
2 UserForm1 . Label1 . Caption = InputBox ( " Введите ␣ слово : " )
3 UserForm1 . Show
4 End Sub
Таким образом, после нажатия на кнопку на листе MS Excel с помощью диалогового окна InputBox у пользователя будет запрошено слово. Введенное пользователем слово будет присвоено значению заголовка компонента Label1. Затем с помощью
команды UserForm1.Show пользовательская форма будет выведена на экран с изображением введенного слова (рисунок 5.6).
Модернизируем созданную форму. Добавим на форму UserFrom1 кнопку, при
нажатии которую форма будет исчезать с экрана. Для этого с помощью мыши разместим и зададим размер кнопки, затем определим надпись на кнопке с помощью
свойства (Caption).
64
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 5.1 – Создание пользовательской формы
Рисунок 5.2 – Пример формы в проекте
65
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 5.3 – Меню Toolbox
Определим код программы, выполняемой при нажатии созданной кнопки:
1 P r i v a t e Sub CommandButton1_Click ( )
2 UserForm1 . Hide
3 End Sub
Добавим на форму еще одну кнопку, при нажатии на которую будет выводится
число символов в введенном пользователем слове. Программный код для этой кнопки
будет следующим:
1 P r i v a t e Sub CommandButton2_Click ( )
2 MsgBox ( " Количество ␣ символов ␣ во ␣ введенном ␣ с л о в е ␣ = ␣ " &
Len ( UserForm1 . Label1 . Caption ) )
3 End Sub
Подготовленная форма будет выглядеть следующим образом (рисунок 5.7).
Проведем модернизацию подготовленной формы. С помощью манипулятора
мыши увеличим ее размер и добавим на нее поле ввода (TextBox) и еще одну кнопку.
При нажатии на данную кнопку слово, введенное в поле ввода, заменит слово, определенное пользователем при запуске программы, а также будет записано в ячейку А1
листа MS Excel.
Программный код, выполняемый при нажатии на созданную кнопку:
1 P r i v a t e Sub CommandButton3_Click ( )
2 UserForm1 . Label1 . Caption = UserForm1 . TextBox1
3 Range ( "A1" ) = UserForm1 . TextBox1
4 End Sub
66
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 5.4 – Активация меню свойств компонента Label
Рисунок 5.5 – Настройка свойств компонента Label
67
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 5.6 – Результат работы программы
Рисунок 5.7 – Результат работы программы с двумя кнопками
Пример использования разработанной программы изображен на рисунке 5.8.
Пользовательские форм могут содержать те же элементы управления, что и
находящиеся в диалоговых окнах MS Office.
Элементы управления – это элементы диалогового окна, позволяющие пользователю взаимодействовать с программой.
68
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 5.8 – Результат работы программы с двумя кнопками
Стандартные элементы управления, включенные в VBA, представлены в таблице 5.1.
Таблица 5.1 – Стандартные элементы управления VBA
Элемент управления
Label (надпись, метка)
TextBox (текстовое поле)
Назначение
Позволяет создавать заголовки элементов
управления, которые не имеют собственных
встроенных заголовков.
Окно редактируемого текста свободной формы
для ввода данных. Может быть одно- или многострочным.
69
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Продолжение таблицы 5.1
Элемент управления
Назначение
ComboBox (поле со списком) Этот элемент управления объединяет окно редактирования и окно списка. Используйте, когда хотите предложить пользователю выбрать
значение, но при этом дать ему возможность
ввести данные, отсутствующие в списке.
ListBox (список)
Отображает список значений, из которых пользователь может сделать выбор. Окна списка
можно использовать, чтобы дать возможность
пользователю выбрать только одно значение
или же несколько.
CheckBox (флажок)
Стандартный флажок (квадратное окно, содержащее, если элемент выбран, галочку). Используйте флажки для выбора вариантов, которые не являются взаимоисключающими.
OptionButton
(переключа- Стандартная кнопка-переключатель (круглое
тель)
окно, при выборе в центре него находится
черная точка). Используйте OptionButton, когда пользователю необходимо сделать выбор
между положениями «включено/выключено»
или «истина/ложь». Кнопки-переключатели,
как правило, объединяются вместе при помощи
рамки для создания группы переключателей.
ToggleButton (выключатель) Выключатели служат для той же цели, что и
флажки, но выводят установки в виде кнопки,
находящейся в «нажатом» или «отжатом» состоянии.
Frame (рамка)
Визуально и логически объединяет некоторые
элементы управления (особенно флажки, переключатели и выключатели).
CommandButton (кнопка)
Используйте кнопки для выполнения таких
действий, как Cancel (Отмена), Save (Сохранить), ОК и так далее. Когда пользователь щелкает по кнопке, выполняется процедура, закрепленная за данным элементом управления.
70
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Продолжение таблицы 5.1
Элемент управления
TabStrip (набор вкладок)
Назначение
Этот элемент управления состоит из области, в
которую вы помещаете другие элементы управления (такие как текстовые поля, флажки и так
далее) и полосы кнопок табуляции. Используйте элемент управления TabStrip для создания
диалоговых вкладок, отображающих одни и те
же данные в различных категориях.
MultiPage (набор страниц)
Этот элемент управления состоит из нескольких страниц. Вы можете выбрать любую из
них, щелкнув по соответствующей вкладке.
Используйте элемент управления MultiPage
для создания диалоговых окон с вкладками.
ScrollBar (полоса прокрутки) Элемент управления ScrollBar позволяет выбирать линейное значение аналогично тому,
как это можно сделать при помощи счетчика.
SpinButton (счетчик, ворот)
Позволяет пользователю увеличивать и уменьшать числовой параметр до получения требуемого значения.
Image (рисунок)
Элемент управления Image позволяет вывести
на форме графическое изображение. Используйте Image для вывода графических изображений в любом из следующих форматов:
*.bmp, *.cur, *.gif, *.ico, *.jpg или *.wmf.
71
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
6 Отладка программ
6.1 Вывод данных в окно отладки
Для организации вывода данных в окно отладки во время выполнения программы используется команда Debug.Print [список переменных].
В результате в окне отладки Immediate (Проверка) отображаются значения
переменных из списка. Переменные в списке следует разделять точкой с запятой или
пробелом.
Для вывода на экран окна отладки Immediate воспользуйтесь командой View →
Immediate Window (Вид → Окно отладки). Для очистки окна от старых значений,
выделите его содержимое командой Ctrl+A и нажмите клавишу Delete.
Рассмотрим пример использования оператора Debug.Print. Рассмотрим текст
программы, которая обрабатывает содержимое активной ячейки. Переменной n присваивается количество символов активной ячейки без крайних пробелов, а затем в
окно отладки выводится: содержимое переменной mystring, содержимое активной
ячейки, ActiveCell, переменная n.
1 Sub dbg ( )
2 myString = " Отладка ␣ "
3 n = Len ( Trim ( ActiveCell ) )
4 Debug . P r i n t myString ; ActiveCell ; n
5 End Sub
Запускаем программу dbg дважды. Первый раз в активной ячейке было число
1234567, второй раз – текст Десять. Обе строчки отражены в окне отладки, приведенном на рисунке 6.1.
Рисунок 6.1 – Окно отладки
72
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
6.2 Использование точек останова
Средства отладки позволяют устанавливать в программе контрольные точки
(точки останова). В процессе выполнения программы при нахождении интерпретатором точки останова, работа программы приостанавливается. Используя указатель
манипулятора мыши, наводя его на переменные в тексте программы, можно посмотреть текущие значения переменных. Затем работа программы может быть продолжена.
Размещение точки останова осуществляется с помощью манипулятора мыши.
Для этого необходимо с левой стороны около строки кода программы нажать левую
клавишу мыши. Рядом со строкой должен появиться кружок, а строка рядом с ним
окрасится (рисунок 6.2).
Рисунок 6.2 – Установка контрольной точки в программе
Запускаем подготовленную программу с размещенной в ней контрольной точкой (рисунок 6.3).
Рисунок 6.3 – Остановка программы на контрольной точке
Наведя указатель мыши на переменную c, увидим ее текущее значение с = 3.
Для продолжения выполнения программы необходимо нажать на кнопку, расположенную вверху на панели (рисунок 6.4).
73
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 6.4 – Продолжение работы программы
Для удобства просмотра значений переменных они могут быть добавлены в
окно просмотра. Для этого необходимо выделить мышью требуемую переменную,
затем нажать на правую клавишу мыши при наведенном курсоре на выделении. На
экран будет выведено меню, в котором необходимо выбрать Add Watch (добавить в
просмотр) (рисунок 6.5).
Рисунок 6.5 – Вызов меню добавления переменной в просмотр
74
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Затем на экран будет выведено окно вида (рисунок 6.6), в котором будет содержатся информация по добавляемой переменной. В рассматриваемом примере в
просмотр будет добавлена переменная с.
Рисунок 6.6 – Добавления переменной в просмотр
Запустим программу, предварительно определив в программе точку ее останова.
После остановки программы внизу на панели Watches выведены значения добавленных переменных (рисунок 6.7).
Рисунок 6.7 – Значение переменной, выведенное на панели Watches
75
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
7 Лабораторные работы
7.1 Выбор варианта и оформление отчетов
В качестве исходных данных для программ в лабораторных работах будем
использовать четыре последние цифры номера зачетной книжки, например, если
номер зачетной книжки 11219, то будем использовать следующие числа a=12 и b=19.
Если в задании к лабораторной работе указано значение ab, то необходимо
использовать число состоящее из цифр чисел a и b, т.е. число ab=1219.
В случае, когда в задании лабораторной работы указано значение в виде выражения, то необходимо подставлять число, полученное в результате вычисления
данного выражения, например: выражение a + b соответствует числу 31.
Для некоторых лабораторных работ в качестве входных данных используется
ФИО студента, выполняющего лабораторную работу.
Результатом выполнения лабораторной работы является отчет по лабораторной
работе. Он дожен быть сформирован и напечатан для каждой лабораторной работы.
Отчет по лабораторной работе должен включать:
– титульный лист с указанием номера зачетной книжки;
– нумерацию страниц (номер на титульной странице отсутствует);
– содержание отчета;
– цель работы (берется из задания к лабораторной работе);
– задание (берется из задания к лабораторной работе);
– описание хода выполнения работы;
– скриншоты, демонстрирующие работу программы;
– текст программы;
– список использованных источников (берется из списка использованных источников пособия или формируется самостоятельно, размещается на отдельной
странице).
Выполнение отчета осуществляется в MS Word или аналогичной программе с
учетом следующих требований:
– размер бумаги А4, ориентация книжная;
– поля страницы: левое – 2 см., остальные – 1 см.;
– титульный лист содержит рамку и не нумеруется;
– обязательное использование: автоматической расстановки переносов, разрывов
страниц, абзацного отступа, нумерации страниц, нумерованных списков и т.д.;
– междустрочный интервал одинарный;
– отступы в тексте между абзацами отсутствуют;
– шрифт Times New Roman, для основного текста размер 14 pt, для заголовков
разделов шрифт жирный, размер 16 pt;
– рисунки и таблицы должны быть пронумерованы и иметь названия, а в тексте
на них должна присутствовать ссылка.
76
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Для экономии бумаги допустима двухсторонняя печать отчетов. В этом случае
отступы листов должны быть скорректированы под двухстороннюю печать.
Пример отчета по лабораторной работе № 1 приведен в приложении А.
7.2 Лабораторная работа № 1
Тема работы: работа с ячейками листа MS Excel.
Цель работы: получение навыков работы с ячейками листа MS Excel и простейшими операциями над их содержимым.
Задание: разработать программу-калькулятор, выполняющую основные операции (сложение, умножение, деление, вычитание) в виде документа MS Excel. Исходные данные и результат вычислений должны размещаться на листе в ячейках.
Подготовить отчет по лабораторной работе.
Примерный внешний вид выполненной лабораторной работы № 1 изображен
на рисунке 7.1.
Рисунок 7.1 – Примерный внешний вид лабораторной работы № 1
7.3 Лабораторная работа № 2
Тема работы: операторы условного перехода.
Цель работы: приобретение навыков использования операторов условного перехода.
77
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Задание: разработать программу для
⎧
⎪
⎪
⎨ + ,
 = 2 − ,
⎪
⎪
⎩ + ,
расчета выражения вида:
если  < 0;
если  > 0;
если  = 0.
Подготовить отчёт по лабораторной работе.
Примерный внешний вид выполненной лабораторной работы № 2 изображен
на рисунке 7.2.
Рисунок 7.2 – Примерный внешний вид лабораторной работы № 2
7.4 Лабораторная работа № 3
Тема работы: операторы цикла.
Цель работы: получение навыков работы с операторами цикла.
Задание: используя оператор цикла, разработать программу выбора максимального и минимального элемента из массива чисел и вычислить среднее значение для
элементов массива. Подготовить отчет по лабораторной работе.
В качестве данных для программы использовать массив из «10» элементов:
«0+a, 5+a, 10+a, 19+a, 5+a, 20+b, 3+b,1+b, 9+b, 11+b».
Примерный внешний вид выполненной лабораторной работы № 3 изображен
на рисунке 7.3.
Дополнительная информация
Рассмотрим несколько примеров, которые могут быть полезны при выполнении
лабораторной работы № 3.
Пусть необходимо сложить набор чисел, размещенный в столбце на листе MS
Excel (рисунок 7.4).
78
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 7.3 – Примерный внешний вид лабораторной работы № 3
Рисунок 7.4 – Столбец цифр на листе MS Excel
Для решения такой задачи необходимо использовать цикл. Один из наиболее
распространенных циклов For (c. 54). Используем его для создания программы вычисления суммы чисел.
Код программы будет следующим:
1 P r i v a t e Sub CommandButton1_Click ( )
2 Dim i , sum As I n t e g e r
3 sum = 0
4 For i = 3 To 12
5
sum = sum + Cells ( i , 2 )
6 Next i
7 Range ( " F3 " ) = sum
8 End Sub
Определяем две переменные i и sum. Первая будет использована для перебора
79
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
значений, вторая – для хранения суммы значений ячеек. Использование цикла позволяет выполнить команды, расположенные между командами For и Next в цикле, т.е.
последовательно со значениями i=3, . . . , 12.
Для рассмотренной программы удобно было бы знать номер последней ячейки
в столбце. Это можно сделать используя следующий код:
1
2
For i = 3 To Cells ( ActiveSheet . Rows . Count , 2 ) . _
End ( xlUp ) . Row
Более подробная информация по использованию рассмотренного оператора
описана на с. 39.
Усложним задачу. Пусть необходимо подсчитать сумму ячеек, в которых значения больше 10 (рисунок 7.5). Автоматическую окраску ячеек делаем с помощью
инструмента «Условное форматирование».
Рисунок 7.5 – Строка цифр на листе MS Excel
Такая программа может быть реализована с помощью цикла. Например, программа может быть реализована с использованием цикла Do. Пример использования
оператора цикла Do приведен на c. 56. Код программы будет следующим:
1 P r i v a t e Sub CommandButton1_Click ( )
2 Dim i , sum As I n t e g e r
3 sum = 0 : i = 2
4 Do
5
I f Cells ( 3 , i ) > 10 Then sum = sum + Cells ( 3 , i )
6
i = i + 1
7 Loop While Cells ( 3 , i ) <> " "
8 Range ( " F6 " ) = sum
9 End Sub
80
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
7.5 Лабораторная работа № 4
Тема работы: двумерные массивы.
Цель работы: получение навыков работы с операторами цикла и двумерными
массивами.
Задание: разработать программу сортировки двумерного массива по возрастанию и по убыванию значений элементов. Для каждого вида сортировки добавить
свою управляющую кнопку. Сохранить первоначальный вариант массива на листе
MS Excel. Подготовить отчет по лабораторной работе.
В качестве данных использовать двумерный массив следующего вида:
38+a
6+b
-1+a
5+b
22+a
-12+b
23+a
-10+b
13+a 7+a 28+a
4+b -34+b 41+b
15+a 16+a 10+a
15+b -5+b
9+b
14+a 31+a -13+a
12+b 35+b 8+b
0+a -7+a 25+a
2+b 11+b 42+b
Примерный внешний вид выполненной лабораторной работы № 4 изображен
на рисунке 7.6.
Дополнительная информация
Рассмотрим примеры, которые могут быть полезны при выполнении лабораторной работы № 4.
К ячейкам листа MS Excel можно обращаться как к диапазону Range (c. 21).
Такой способ обращения к ячейкам позволяет работать не с одной ячейкой, а с
набором ячеек, представленных двумерным массивом.
Для понимания особенностей использования Range разработаем программу,
которая будет переставлять местами заданные строки внутри двумерного массива
(рисунок 7.7). Рассматриваемую программу реализует следующий программный код:
1 P r i v a t e Sub CommandButton1_Click ( )
2 Dim i , e , str1 , str2 As I n t e g e r
3 Dim R As Range
4 str1 = Range ( "G7" ) : str2 = Range ( " I 7 " )
5 S e t R = Range ( Range ( " I 4 " ) )
6 For i = 1 To R . Columns . Count
7 e = R . Cells ( str1 , i )
8 R . Cells ( str1 , i ) = R . Cells ( str2 , i ) : R . Cells ( str2 , i ) = e
9 Next i
10 End Sub
81
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 7.6 – Примерный внешний вид лабораторной работы № 4
Рисунок 7.7 – Двумерный массив на листе MS Excel
Массив имеет размерность 8 строк и 4 столбца. В программу массив передается
через указание параметра диапазона. Диапазон ячеек массива указан в ячейке I4. В
ячейках G7 и I7 указываются строки, которые необходимо поменять местами. В на82
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
чале программы объявляются переменные, в том числе переменная R типа Range для
работы с массивом. Команда Set R = Range(Range("I4")) присваивает переменной R
диапазон значений, прописанный в ячейке I4.
Обратится к ячейке массива R можно с помощью команды R.Cells(1,1), таким
образом будет получено значение из первой строки первого столбца.
Перебор элементов в строках реализован с помощью цикла For. При необходимости можно скопировать значения массива в диапазон B12:E19 с помощью
команды:
1
Range ( Range ( " I 4 " ) ) . Copy Range ( " B12 : E19 " )
7.6 Лабораторная работа № 5
Тема работы: работа со строками.
Цель работы: получение навыков работы со строками.
Задание: разработать программу, которая выводит количество повторений букв,
используемых в написании Вашего ФИО (пробел не учитывать). Например, для строки «Полищук Юрий Владимирович» буква «п» используется «1» раз, буква «и»
используется «5» раз и т.д. Подготовить отчет по лабораторной работе.
Примерный внешний вид выполненной лабораторной работы № 5 изображен
на рисунке 7.8.
Дополнительная информация
Рассмотрим примеры, которые могут быть полезны при выполнении лабораторной работы № 5.
Для поиска подстроки или символа в строке может быть использована функция
InStr (c. 44). Функция возвращает номер позиции вхождения подстроки.
В качестве примера рассмотрим следующий код:
1 MsgBox I n S t r ( 1 , " Полищук ␣ Юрий ␣ Владимирович " , " и " )
В результате его выполнения на экран будет выведено сообщение со значением
«4».
Для преобразования строки к нижнему регистру необходимо использовать функцию LCase, например: LCase("Полищук Юрий Владимирович").
Получить символ из строки, зная его порядковый номер в строке, можно с
помощью команды Mid, которая рассмотрена на c. 45.
Рассмотрим использование данной команды на примере. Пусть необходимо
последовательно вывести все символы определенной строки.
Рассматриваемую программу реализует следующий программный код:
1 P r i v a t e Sub CommandButton1_Click ( )
2 s = " Полищук "
83
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3 For i = 1 To Len ( s )
4
c = Mid ( s , i , 1 )
5
MsgBox c
6 Next
7 End Sub
Рисунок 7.8 – Примерный внешний вид лабораторной работы № 5
7.7 Лабораторная работа № 6
Тема работы: процедуры и функции.
Цель работы: получение навыков использования функций.
Задание: разработать программу перевода числа из десятичной системы счисления в двоичную и наоборот с использованием двух функций. В качестве исходных
84
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
данных использовать число b вашего варианта. Подготовить отчет по лабораторной
работе.
Примерный внешний вид выполненной лабораторной работы № 6 изображен
на рисунке 7.9.
Рисунок 7.9 – Примерный внешний вид лабораторной работы № 6
7.8 Лабораторная работа № 7
Тема работы: пользовательские формы.
Цель работы: получение навыков работы с пользовательскими формами.
Задание: разработать программу подсчета количества символов в фамилии,
имени и отчестве студента. За исходные данные взять Ваше ФИО. Ввод данных в
программу организовать в виде пользовательской формы. Результаты работы (количество символов в фамилии, имени и отчестве) вывести на форму и продублировать
вывод на лист MS Excel. Подготовить отчет по лабораторной работе.
Примерный внешний вид выполненной лабораторной работы № 7 изображен
на рисунке 7.10.
7.9 Лабораторная работа № 8
Тема работы: вычисление формул, заданных в виде строк.
Цель работы: получение навыков использования функции вычисления Evaluate.
Задание: разработать программу, выполняющую вычисление функции с одной
переменной x, например:  () = 2 + . Пользователь программы должен имеет
возможность определения уравнения функции и значения x. В качестве значения x
выбрать любое допустимое значение. Подготовить отчет по лабораторной работе.
Примерный внешний вид выполненной лабораторной работы № 8 изображен
на рисунке 7.11.
85
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 7.10 – Примерный внешний вид лабораторной работы № 7
Рисунок 7.11 – Примерный внешний вид лабораторной работы № 8
Дополнительная информация
Рассмотрим несколько примеров, которые могут быть полезны при выполнении
лабораторной работы № 8.
При решении различных задач возникает необходимость вычисления значений
по формуле, которая может генерироваться в процессе выполнения программы. В
86
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
данной ситуации формула генерируется самой программой в виде строки по правилам
оформления формул MS Excel. Для вычисления формулы, заданной в виде строки,
необходимо использовать встроенную функцию Evaluate(str). Аргумент str – строка,
в которой записано вычисляемое выражение по правилам MS Excel.
Рассмотрим пример ее использования. Пусть необходимо вычислить значение,
заданное строкой «10 ˆ 2 - 2 ˆ 3 + 15», которая помещена в ячейку B4. Программа,
выполняющая искомую операцию, будет использовать команду Evaluate:
1 P r i v a t e Sub CommandButton1_Click ( )
2 MsgBox Evaluate ( Range ( " B4 " ) . Text )
3 End Sub
Результат работы программы изображен на рисунке 7.12.
Рисунок 7.12 – Результат работы программы вычисления формулы
В случае, когда в вычисляемом выражении присутствует переменная, например,
x, то перед его вычислением необходимо выполнить замену символа x на требуемое
значение.
7.10 Лабораторная работа № 9
Тема работы: текстовые файлы.
Цель работы: получение навыков работы с текстовыми файлами.
Задание: разработать программу записи ФИО в текстовый файл. Название текстового файла определяется в программе, а пользователь должен иметь возможность
добавления ФИО в текстовый файл через интерфейс программы и вывода его содержимого на лист MS Excel с нумерацией строк. Используя программу? добавить
87
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
в текстовый файл более пяти записей, включая Ваше ФИО, и вывести содержимое
файла на лист MS Excel. Подготовить отчет по лабораторной работе.
Примерный внешний вид выполненной лабораторной работы № 9 изображен
на рисунке 7.13.
Рисунок 7.13 – Примерный внешний вид лабораторной работы № 9
Дополнительная информация
Рассмотрим несколько примеров, которые могут быть полезны при выполнении
лабораторной работы № 9.
В VBA существует несколько способов работы с текстовыми файлами. Рассмотрим наиболее простые способы добавления строк в текстовый файл и чтения
строк из текстового файла.
Добавление в текстовый файл строки может быть реализовано следующим программным кодом:
1 Sub DemoWriteLine ( )
2 Dim f1 As I n t e g e r ’ номер файла
3 f1 = F r e e F i l e ’ Присваиваем переменной свободный номер
4 Open "D : \ demo . t x t " For Append As #f1 ’ Открываем файл для
добавления
5 P r i n t #f1 , " Новая ␣ с т р о к а " ’ Записываем в файл строку
6 C l o s e #f1 ’ Закрываем файл
7 End Sub
88
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
В результате выполнения рассмотренного кода в текстовый файл с demo.txt,
расположенный на диске D, будет добавлена строка Новая строка. После добавления
файл будет сохранен с изменением. В случае отсутствия файла с именем demo.txt
будет создан новый файл с таким названием. Если файл был не пустым, но новая
строка будет добавлена в его конец.
Чтение всех строк текстового файла может быть реализовано следующим программным кодом:
1
2
3
4
5
6
7
8
9
10
11
Sub DemoReadLine ( )
Dim s As S t r i n g
Dim f1 As I n t e g e r ’ номер файла
f1 = F r e e F i l e ’ Присваиваем переменной свободный номер
Open "D : \ demo . t x t " For I n p u t As #f1 ’ Открываем файл для
чтения
Do While Not EOF( f1 ) ’ Делать пока не конец файла
Line I n p u t #f1 , s ’ Читаем строку файла
MsgBox s ’ Выводим строку на экран
Loop
C l o s e #f1 ’ Закрываем файл
End Sub
В результате выполнения рассмотренного кода из тестового файла demo.txt,
расположенного на диске D, будут последовательно прочитаны все строки и выведены
на экран. После окончания чтения файла будет закрыт. В случае отсутствия файла с
именем demo.txt на экран будет выведено сообщение об ошибке.
7.11 Лабораторная работа № 10
Тема работы: векторная графика в VBA.
Цель работы: получение навыков использования векторной графики в MS Excel.
Задание: разработать программу, позволяющую выводить заданные числа на
лист MS Excel, используя возможности векторной графики. В качестве исходного числа использовать значение ab Вашего варианта. Реализовать в программе возможность
удаления нарисованных цифр. Подготовить отчет по лабораторной работе.
Примерный внешний вид выполненной лабораторной работы № 10 изображен
на рисунке 7.14.
Дополнительная информация
Рассмотрим несколько примеров, которые могут быть полезны при выполнении
лабораторной работы № 10.
Рисование в VBA за счет использования объектов векторной графики MS Word.
Графические фигуры, представленные на панели рисования MS Word, образуют в
VBA семейство объектов Shapes (рисунок 7.15).
89
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 7.14 – Примерный внешний вид лабораторной работы № 10
Рисунок 7.15 – Объекты Shapes панели рисования MS Word
90
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Для рисования используются варианты метода добавления объектов семейства Shapes – Add: AddLine – добавить линию, AddCurve – добавить кривую,
AddPolyLine – добавить полилинию и AddShape – добавить фигуру.
Для рисования красной горизонтальной линии с началом в точке (10, 50) и
концом в точке (150, 50) необходимо выполнить следующий код:
1 Sub DemoLine ( )
2 S e t s = ActiveSheet . Shapes . _
3 AddLine ( 1 0 , 5 0 , 1 5 0 , 5 0 ) ’ рисуем объект типа ли ни я
4 s . Name = " l i n e _ 1 " ’ задаем н а з в а н и е объекта
5 s . Line . ForeColor .RGB = vbRed ’ задаем цвет объекта
6 s . Line . Weight = 10 ’ задаем толщину линии
7 End Sub
В результате выполнения рассмотренного кода на лист MS Excel будет добавлена горизонтальная линия красного цвета толщиной 10 pt (рисунок 7.16).
Рисунок 7.16 – Результат выполнения команды AddLine
Удаление линии с листа MS Excel может быть выполнено следующим образом:
1 Sub DemoLineDelete ( )
2 ActiveSheet . Shapes ( " l i n e _ 1 " ) . D e l e t e ’ удаляем объект с
именем l i n e _ 1
3 End Sub
При добавлении объектов Shapes тип объекта можно указывать используя его
номер или название:
1 Sub DemoShapes ( )
2 ’ Рисуем первый п р я м о у г о л ь н и к
3 S e t s = ActiveSheet . Shapes . _
4 AddShape ( msoShapeRectangle , 5 0 , 5 0 , 1 0 0 , 2 0 0 ) ’ рисуем
объект типа п р я м о у г о л ь н и к
5 s . Name = " R e c t _ 1 " ’ задаем н а з в а н и е объекта
91
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
6 s . Line . ForeColor .RGB = vbBlue ’ задаем цвет объекта
7 s . Fill . ForeColor .RGB = vbWhite ’ задаем цвет з а л и в к и
8 s . Line . Weight = 10 ’ задаем толщину линии
9 ’ Рисуем второй п р я м о у г о л ь н и к
10 S e t s1 = ActiveSheet . Shapes . AddShape ( 1 , 2 5 0 , 5 0 , 1 0 0 ,
2 0 0 ) ’ рисуем объект типа п р я м о у г о л ь н и к
11 s1 . Name = " R e c t _ 2 " ’ задаем н а з в а н и е объекта
12 s1 . Line . ForeColor .RGB = vbGreen ’ задаем цвет объекта
13 s1 . Fill . ForeColor .RGB = vbWhite ’ задаем цвет з а л и в к и
14 s1 . Line . Weight = 10 ’ задаем толщину линии
15 End Sub
В результате выполнения рассмотренного кода на лист MS Excel будет добавлено два прямоугольника (рисунок 7.17).
Рисунок 7.17 – Результат выполнения команды AddShape
Вывод цифр на лист MS Excel может быть реализован с помощью команды
AddPolyline следующим образом:
1 Sub DemoDig6 ( )
2 ’ о п р е д е л я е м двумерный массив для х р а н е н и я координат точек
3 Dim parr ( 1 To 6 , 1 To 2 ) As S i n g l e
4 parr ( 1 , 1 ) = 1 2 0 : parr ( 1 , 2 ) = 6 0 : parr ( 2 , 1 ) = 100
5 parr ( 2 , 2 ) = 8 0 : parr ( 3 , 1 ) = 1 0 0 : parr ( 3 , 2 ) = 100
92
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
6 parr ( 4 , 1 ) = 1 2 0 : parr ( 4 , 2 ) = 1 0 0 : parr ( 5 , 1 ) = 120
7 parr ( 5 , 2 ) = 8 0 : parr ( 6 , 1 ) = 1 0 0 : parr ( 6 , 2 ) = 80
8 S e t s = ActiveSheet . Shapes . AddPolyline ( parr )
9 s . Name = " d6 "
10 s . Line . ForeColor .RGB = vbRed
11 s . Fill . ForeColor .RGB = vbWhite
12 s . Line . Weight = 4
13 End Sub
В результате выполнения рассмотренного кода на лист MS Excel будет добавлена красная цифра шесть (рисунок 7.18).
Рисунок 7.18 – Вывод цифры на лист MS Excel
93
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Заключение
Рассмотренный в пособии теоретический материал позволяет понять потенциал
возможностей среды VBA и обозначить эффективность ее применения на практике.
Практические примеры, представленные в пособии, демонстрируют широкие
возможности среды VBA для автоматизации процессов обработки данных в MS Excel.
Освоение материала данного пособия несомненно способствует повышению
эффективности работы на компьютере в средах, поддерживающих VBA, и поэтому
оно рекомендуется для изучения всем пользователям персональных компьютеров.
94
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Алфавитный указатель терминов
Symbols
-, 35
!, 26
∖, 37
*, 36
/, 37
@, 26
#, 26
$, 26
%, 26
&, 26, 44
ˆ , 36
+, 35
A
ActiveCell, 72
Add Watch, 74
And, 40
Array, 30
Asc, 43
B
Boolean, 24
ByRef, 61
Byte, 24
ByVal, 61, 62
C
Call, 62
Caption, 64
Case Else, 51
Cells, 21
Choose, 53
Chr, 43
Const, 29
Currency, 24
D
Date, 24
Debug.Print, 72
Decimal, 24
Dim, 28
Do...Loop, 55
Do...Loop Until, 57
Do...Until, 55
Do...While, 55
Double, 24
E
Empty, 33
End Select, 51
End Sub, 17
Eqv, 41
Erase, 33
Evaluate, 87
Exit, 54, 63
Exit Do, 54, 63
Exit For, 54, 63
Exit Function, 63
Exit Sub, 63
F
For...Next, 54
Formula, 24
Function, 58
I
If...Then, 48
If...Then...Else, 48
IIf, 50
Immediate, 72
Immediate Window, 72
Imp, 41
InputBox, 20, 64
InStr, 44
Integer, 24
Is, 51
L
Label, 64
95
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
LBound, 30
LCase, 43
Left, 43
Len, 43
Long, 24
Loop, 56
LTrim, 43
M
Mid, 45
Mod, 37
MsgBox, 18
N
Not, 42
Nothing, 33
O
Object, 24
Offset, 38
Option Base, 30
Option Compare, 42
Option Explicit, 29
Optional, 60
Or, 41
P
ParamArray, 61
Preserve, 32
Private, 29, 59
Public, 28, 59
R
Range, 21
ReDim, 32
Rem, 18
Replace, 43
Rigth, 43
RTrim, 43
S
Select Case, 50
shapes, 89
Single, 24
Space, 43
Split, 45
Static, 29, 59
step, 55
Str, 43
StrComp, 43
StrConv, 44, 46
String, 24, 44
Sub, 17, 58
Switch, 52
T
TextBox, 66
To, 31, 51
Toolbox, 64
Trim, 44
Type, 25
TypeName, 28
U
Ubound, 30
UCase, 44
UserForm, 64
V
Val, 44
Variant, 24, 29
VBA, 5
vbLowerCase, 47
vbProperCase, 47
vbUpperCase, 47
W
Watches, 75
X
Xor, 42
А
активная ячейка, 72
аргументы процедуры, 60
96
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
В
векторная графика, 89
возведение в степень аргументов, 36
вывод данных в окно отладки, 72
вызов процедур, 62
вызов функций, 62
выход из процедур и циклов, 63
выход из цикла, 54
вычитание аргументов, 35
Д
деление аргументов, 37
деление по модулю, 37
динамический массив, 30
– изменение размеров, 32
– описание, 31
– освобождение памяти, 33
К
команда Run, 58
константы, 29
Л
локальные переменные, 26
М
макрос, 6
массив аргументов в процедуре, 61
массивы, 30
многомерные массивы, 31
модуль, 15
модульные переменные, 27
Н
номер последней заполненной ячейки,
39
О
общие переменные, 28
окно отладки, 72
операторы сравнения чисел, 40
операторы цикла, 53
описание процедур, 59
определение процедур, 58
определение функций, 58
отладка программ, 72
П
панель «Быстрого доступа», 18
панель «Разработчик», 6, 15
панель «Элементы управления», 6
передача аргументов в процедуры, 62
переменная, 26
поле отметок, 16
пользовательская форма, 64
пользовательские типы данных, 25
прерывание работы цикла, 54
процедура, 58
Р
работа с текстовыми файлами, 88
работа со строками, 42
режим VBA, 12
режим конструктора, 11, 13
С
связь процедур и макросов, 58
символы описания типов данных, 26
сложение аргументов, 35
Т
точка останова, 73
У
умножение аргументов, 36
уровни объявления переменных, 26
условный переход, 48
Ф
фиксированный массив, 30
форма, 15
функция, 58
Ц
целочисленное деление, 37
Э
элементы ActiveX, 11
элементы управления, 68
97
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Список использованных источников
1 Кузьменко, В. Г. VBA. Эффективное использование / В. Г. Кузьменко. – М.:
«Бином-Пресс», 2012. – 624 c.: ил.
2 Уокенбах, Джон. Профессиональное программирование на VBA в Excel
2002.: Пер. с англ. / Д. Уокенбах. – М.: Издательский дом «Вильямс», 2003. – 784 с.:
ил.
3 Камминг, Стив. VBA для «чайников», 3-е издание. : Пер. с англ. / С. Камминг.
– М.: Издательский дом «Вильямс», 2003. – 488 с.: ил.
4 Гетц, К. Программирование в Microsoft Office. Для пользователя: пер. с англ.
/ К. Гетц, М. Джилберт – К.: Издательская группа BHV, 2000. – 384 с.: ил.
5 Гладкий, А.А. Excel. Трюки и эффекты. / А.А. Гладкий, А.А. Чиртик. – СПб.:
Питер, 2008. – 368 с.: ил.
6 Мюллер, Джон. VBA и Microsoft Office 2007 для чайников. / Д. Мюллер. –
М.: «Диалектика», 2009. – 368 с.: ил.
7 Буллен, С. Профессиональная разработка приложений Microsoft Office Excel.
Professional Excel Development: The Definitive Guide to Developing Applications Using
Microsoft Excel and VBA. / С. Буллен, Р. Боуви, Д. Грин. – М.: «Вильямс», 2007. – 736
с.: ил.
98
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Приложение А
Пример оформления отчета
99
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
100
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
101
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
102
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
103
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Приложение Б
Тестовые задания
Выполнение тестовых заданий, приведенных в данном разделе, способствует
закреплению изученного теоретического материала пособия и эффективному использованию полученных знаний при решении практических задач.
Тестирование может проводиться двумя способами: с использованием бумажной версии пособия и с использованием электронной версии пособия.
В первом случае для проверки правильности ответов на тестовые вопросы
необходимо воспользоваться картой ответов, которая приведена в приложении В.
Во втором случае при использовании электронного (PDF варианта) пособия
можно осуществлять проверку правильности ответов на тестовые вопросы путем
нажатия на вариант ответа манипулятором мыши. После нажатия будет выведено
сообщение с текстом «Правильно!» – при верном выборе ответа и «Не правильно!»
– при неверном выборе ответа.
Вопрос № 1. С помощью какой команды можно вывести на экран сообщение?
1. InputBox
2. Range
3. MsgBox
4. Dim
Вопрос № 2. С помощью каких команд можно получить содержимое ячейки листа
MS Excel?
1. InStr, Mid
2. Cells, Range
3. Asc, Rset
4. Format, Imp
Вопрос № 3. Какой командой можно получить содержимое активной ячейки листа
MS Excel?
1. ActiveCell
2. MyValue
3. ReDim
4. Variant
Вопрос № 4. С помощью какой из приведенных функций можно организовать ввод
данных в программу?
1. Exp
2. LBound
3. Fix
4. InputBox
104
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Вопрос № 5. Какие из приведенных типов данных подходят для хранения строк?
1. Byte, Double
2. Date, Integer
3. Object, Long
4. String, Variant
Вопрос № 6. Что выведет программа на экран для приведенного листа?
1
MsgBox ActiveCell . Value + Cells ( 3 , 2 )
1. 5
2. 6
3. 1
4. 8
Вопрос № 7. Что выведет программа на экран для приведенного листа?
1
MsgBox Cells ( 2 , 1 ) & Cells ( 3 , 2 )
1. 11
2. 2
3. 4
4. Ошибку
Вопрос № 8. Какие из приведенных типов данных используются для хранения целых
чисел?
1. Single, Integer
2. Byte, Double
3. Long, Integer
4. Currency, Boolean
105
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Вопрос № 9. Какая из приведенных инструкций используется для описания переменной в программе?
1. Dim
2. Rem
3. Create
4. Imp
Вопрос № 10. С помощью какой инструкции определяются переменные, доступные
только для процедур одного модуля?
1. Public
2. Static
3. Private
4. Local
Вопрос № 11. Для каких целей используется инструкция Option Explicit?
1. Для описания переменных
2. Для указания начала индексации массивов
3. В процессе отладки программ
4. Для указания явного описания переменных
Вопрос № 12. Укажите верный вариант описания константы.
1. Dim const r = 10
2. Const r = 10
3. Rem r=10
4. ReDim r = 10
Вопрос № 13. Использование какой инструкции позволяет сохранять значения локальных переменных между вызовами процедур?
1. Public
2. Static
3. Private
4. ReDim
Вопрос № 14. С помощью какой инструкции объявляются переменные, доступные во
всех модулях?
1. Local
2. Static
3. Public
4. Private
Вопрос № 15. В чем отличие константы от переменной?
1. Хранит фиксированное значение
2. Должна иметь уникальный идентификатор
3. Не имеет определенного типа
4. Используется для передачи значений
106
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Вопрос № 16. Укажите правильный вариант описания переменной.
1. Dim Private t As Byte
2. Public Dim t As String
3. Rem t As Integer
4. Private t As Byte
Вопрос № 17. Что выведет программа на экран для приведенного листа?
1
MsgBox Range ( " B2 : D3" ) . Cells ( 2 , 1 )
1. 9
2. 10
3. 11
4. 12
Вопрос № 18. С помощью какой инструкции можно указать название листа MS Excel
для вывода информации в его ячейки?
1. Sheet
2. Book
3. Worksheet
4. Другая
Вопрос № 19. Укажите тип данных, который из представленных тип данных требует
максимального количества оперативной памяти для хранения?
1. Double
2. Object
3. String
4. Variant
Вопрос № 20. Какие символы не допустимы в имени переменных?
1. Точки и символы описания типа
2. Цифры
3. Заглавные буквы
4. Подчеркивание «_»
Вопрос № 21. Какое максимальное количество символов может быть использовано в
названии переменной?
1. 32
2. 64
3. 256
4. 512
107
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Вопрос № 22. С помощью какой конструкции описывается пользовательский тип
данных?
1. Sub . . . End Sub
2. Base . . . End Base
3. Create . . . End Create
4. Type . . . End Type
Вопрос № 23. С помощью какой инструкции можно определить начало индексации
массива в программе?
1. Option Explicit
2. Type
3. Option Base
4. Start
Вопрос № 24. Что выведет программа на экран?
1 Option Base 1
2 Sub Demo_arr ( )
3 Dim Arr ( 1 0 0 )
4 MsgBox LBound ( Arr ) & " . . . " & UBound ( Arr )
5 End Sub
1. 0 . . . 100
2. 1 . . . 100
3. 0 . . . 99
4. Ошибку
Вопрос № 25. С помощью какого оператора можно изменить размерность динамического массива в программе?
1. UBound
2. Add
3. Preserve
4. ReDim
Вопрос № 26. Использование какой инструкции позволяет при изменении размерности динамического массива сохранять значения его элементов?
1. Save
2. Preserve
3. Static
4. Nothing
108
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Вопрос № 27. Что выведет программа на экран?
1 Sub Demo_arr1 ( )
2 mA = Array ( " a " , " b " , " c " , " d " , " e " )
3 MsgBox mA ( 4 )
4 End Sub
1. a
2. b
3. d
4. e
Вопрос № 28. Укажите правильное описание массива?
1. Dim arr1 (1 . . . 100) As Integer
2. Dim arr_2 (1 To 100) As String
3. Dim arr3 (1_100) As Byte
4. Sub arr4 (1 To 100) As Long
Вопрос № 29. В чем отличие динамического массива от обычного массива?
1. Его размерность можно изменять во время работы программы
2. Для хранения его элементов требуется меньше памяти
3. Работа с ним осуществляется быстрее, чем с обычным
4. Нет отличий
Вопрос № 30. Укажите правильное описание динамического массива.
1. Dim MyDinamicArr(. . . ) As Single
2. Dim MyDinamicArr() As String
3. Dim MyDinamicArr(1 . . . ) As Long
4. Dim MyDinamicArr(Empty)
Вопрос № 31. Что выведет программа на экран?
1
MsgBox 13 \ 3
1. 4
2. 4,333 . . .
3. 6
4. 1
Вопрос № 32. Что выведет программа на экран?
1
MsgBox 41 mod 7
1. 0
2. 5,857 . . .
3. 1
4. 6
109
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Вопрос № 33. С помощью какой инструкции можно осуществить смещение адресов
относительно активной ячейки?
1. Move
2. Atn
3. Rnd
4. Offset
Вопрос № 34. С помощью какой функции можно определить вхождение подстроки в
строку?
1. Lset
2. InStr
3. String
4. StrComp
Вопрос № 35. Что выведет программа на экран?
1 Sub t35 ( )
2 Dim A As S t r i n g
3 A = " Привет " : A = A & " ! "
4 MsgBox Len ( A )
5 End Sub
1. 7
2. 7
3. Привет
4. Привет!
Вопрос № 36. С помощью какой функции можно преобразовать строку, хранящую
число, в число?
1. Asc
2. Str
3. Val
4. Mid
Вопрос № 37. С помощью какой функции можно выполнить замену подстроки в
строке?
1. InStr
2. Replace
3. StrConv
4. Trim
Вопрос № 38. С помощью какой функции можно удалить крайние пробелы в строке?
1. Trim
2. Format
3. Del
4. Chr
Вопрос № 39. С помощью какой функции можно преобразовать число в строку?
1. Val
2. Format
3. StrConv
4. Str
110
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Вопрос № 40. Что выведет программа на экран?
1 Sub t40 ( )
2 L = " 1234567890 "
3 MsgBox Mid ( L , 7 , 2 )
4 End Sub
1. 67
2. 78
3. 89
4. 0
Вопрос № 41. Что выведет программа на экран?
1 Sub t41 ( )
2 res1 = " пробный " : res2 = " ␣ т е к с т "
3 res = res1 + res2
4 MsgBox StrConv ( res , vbProperCase )
5 End Sub
1.
2.
3.
4.
пробный текст
Пробный Текст
Пробный текст
ПРОБНЫЙ ТЕКСТ
Вопрос № 42. Укажите оператор цикла с постусловием?
1. Do . . . Loop While
2. Do Until . . . Loop
3. Do While . . . Loop
4. For . . . Next
Вопрос № 43. Что выведет программа на экран?
1 Sub t43 ( )
2 Dim arr ( ) As S t r i n g
3 Dim s As S t r i n g
4 s = " 123 ␣ 456 ␣ 789 "
5 arr = Split ( s , " ␣ " )
6 MsgBox arr ( 1 )
7 End Sub
1. 123
2. 456
3. 789
4. Пробел
111
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Вопрос № 44. Что выведет программа на экран?
1 Sub t44 ( )
2 Dim a As Byte
3 a = 10
4 I f a < 10 Then MsgBox " Число ␣ < ␣ 10 " E l s e MsgBox " Число ␣ => ␣
10 "
5 End Sub
1.
2.
3.
4.
Число < 10
Число => 10
Оба сообщения
Ошибку
Вопрос № 45. Укажите оператор цикла с предусловием?
1. For . . . Next
2. Do . . . Loop Until
3. Do . . . Loop While
4. Нет правильного варианта
Вопрос № 46. Что выведет программа на экран?
1 Sub t46 ( )
2 Dim a , b As Byte
3 a = 5: b = 8
4 MsgBox I I f ( a > b , " Первое " , " Второе " )
5 End Sub
1.
2.
3.
4.
Первое
Пустое окно
Второе
Ничего не выведет
Вопрос № 47. Если необходимо выполнять строго определенные действия в зависимости от значения параметра, который может принимать некоторое число значений
(два и более), то какой оператор удобно использовать в данном случае?
1. if . . . then
2. if . . . then . . . Else
3. Select Case
4. Другой
112
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Вопрос № 48. Что выведет программа на экран?
1 Sub t48 ( )
2 p = 3
3 MsgBox S w i t c h ( p = 1 , " Один " , p = 2 , " Два " , p = 3 , " Три " )
4 End Sub
1. Ничего
2. Один
3. Два
4. Три
Вопрос № 49. Что выведет программа на экран?
1 Sub t48 ( )
2 MsgBox Choose ( 2 , " Один " , " Два " , " Три " , " Четыре " )
3 End Sub
1. Один
2. Два
3. Три
4. Четыре
Вопрос № 50. Что выведет программа на экран?
1 Sub t50 ( )
2 For i = 8 To 10
3
s = s + Str (i)
4 Next i
5 MsgBox s
6 End Sub
1. 8 9
2. 8 9 10
3. 9 10
4. 8 10
Вопрос № 51. Что выведет программа на экран?
1 Sub t51 ( )
2 Dim s As S t r i n g
3 For i = 8 To 3 Step −2
4
s = s + Str (i)
5 Next i
6 MsgBox s
7 End Sub
1. 8 9 10
2. 8 6
3. 8 6 4 3
4. 8 6 4
113
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Вопрос № 52. Что выведет программа на экран для приведенного листа?
1 Sub t52 ( )
2 Dim sum As I n t e g e r
3 For i = 1 To 3
4
For j = 2 To 4
5
sum = sum + Cells ( i , j )
6
Next j
7 Next i
8 MsgBox sum
9 End Sub
1. 21
2. 22
3. 32
4. 29
Вопрос № 53. Что выведет программа на экран?
1 Sub t54 ( )
2 MsgBox ActiveSheet . Cells ( ActiveSheet . _
3 Rows . Count , 3 ) . End ( xlUp ) . Row
4 End Sub
1.
2.
3.
4.
Номер столбца последней заполненной ячейки в 3-ей строке
Количество заполненных ячеек в 3-ем столбце
Количество заполненных ячеек в 3-ей строке
Номер строки последней заполненной ячейки в 3-ем столбце
114
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Вопрос № 54. Что выведет программа на экран для приведенного листа?
1 Sub t53 ( )
2 Dim i , j , sum As I n t e g e r
3 i = 2: j = 1
4 Do While i < 4
5
Do
6
sum = sum + Cells ( i , j )
7
j = j + 1
8
Loop While j <= 3
9 i = i + 1: j = 1
10 Loop
11 MsgBox sum
12 End Sub
1. 42
2. 33
3. 26
4. 24
Вопрос № 55. Что выведет программа на экран для приведенного листа?
1 Sub t55 ( )
2 MsgBox ActiveSheet . Cells ( 2 ,
ActiveSheet . Columns . Count ) . End _
3 ( xlToLeft ) . Column
4 End Sub
1. 3
2. 4
3. 5
4. 6
115
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Вопрос № 56. Что выведет программа на экран?
1 MsgBox Sqr ( 2 5 6 ) ^ 2
1. 16
2. 64
3. 256
4. 65536
Вопрос № 57. Что выведет программа на экран?
1
MsgBox Application . Fact ( 3 )
1. 9
2. 6
3. 3
4. 0
Вопрос № 58. Что выведет программа на экран?
1 Sub t58 ( )
2 Dim a , b As I n t e g e r
3 a = 10: b = 5
4 MsgBox Not a > b
5 End Sub
1. Not a > b
2. True
3. Ошибку
4. False
Вопрос № 59. Что выведет программа на экран?
1 Sub t59 ( )
2 Dim i , sum As I n t e g e r
3 Dim arr ( 2 , 2 ) As I n t e g e r
4 arr ( 0 , 0 ) = 1 : arr ( 0 , 1 ) = 2 : arr ( 0 , 2 ) = 3 : arr ( 1 , 0 ) =
4 : arr ( 1 , 1 ) = 5 : arr ( 1 , 2 ) = 6 : arr ( 2 , 0 ) = 7 : arr ( 2 ,
1 ) = 8 : arr ( 2 , 2 ) = 9
5 For i = 0 To 2
6
sum = sum + arr ( i , i )
7 Next i
8 MsgBox sum
9 End Sub
1. 15
2. 13
3. 6
4. 0
116
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Вопрос № 60. Что выведет программа на экран?
1 Sub t60 ( )
2 Dim i As Byte
3 Dim arr ( ) As I n t e g e r
4 Dim s As S t r i n g
5 ReDim arr ( 9 )
6 For i = 0 To 9
7
arr ( i ) = i
8 Next i
9 ReDim P r e s e r v e arr ( 5 )
10 For i = 0 To UBound ( arr )
11
s = s + S t r ( arr ( i ) )
12 Next i
13 MsgBox s
14 End Sub
1. 123456
2. 012345
3. 0123456789
4. 0
Вопрос № 61. В чем отличие функции от процедуры?
1. Функция может использоваться только внутри одного модуля
2. Функция может возвращать результат и использоваться в других выражениях
3. Функция не может быть использована для обработки массивов
4. Нет отличий
Вопрос № 62. Для каких целей используется ключевое слово Optional при описании
аргументов процедур и функций?
1. Указывает, что аргумент является необязательным
2. Указывает, что аргумент передается по значению
3. Указывает, что аргумент передается по ссылке
4. Указывает, что аргумент должен быть возвращен, как результат
Вопрос № 63. С помощью какого ключевого слова осуществляется вызов процедур?
1. Run
2. Start
3. Call
4. Push
117
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Вопрос № 64. Для каких целей используется ключевое слово ByVal при описании
аргументов процедур и функций?
1. Указывает, что аргумент является необязательным
2. Указывает, что аргумент передается по значению
3. Указывает, что аргумент передается по ссылке
4. Не может быть использовано в данном контексте
Вопрос № 65. Какая из перечисленных команд выполняет немедленный выход из
функции?
1. Close Function
2. Break Function
3. Next Function
4. Exit Function
Вопрос № 66. Что выведет программа на экран?
1
2
3
4
5
6
7
8
9
Sub pr ( a , b )
a = a * b
End Sub
Sub t66 ( )
Dim a , b As I n t e g e r
a = 2: b = 3
pr a , b
MsgBox a & " ␣ " & b
End Sub
1. 2 3
2. 6 3
3. 3 3
4. 6 2
Вопрос № 67. Для каких целей используется ключевое слово ParamArray?
1. Для описания динамических массивов
2. Для передачи значения аргумента по ссылке в процедуру или функцию
3. Для передачи массива значений в процедуру или функцию
4. Для определения количества элементов массива при его описании
118
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Вопрос № 68. Что выведет программа на экран?
1
2
3
4
5
6
7
F u n c t i o n Fun ( a As I n t e g e r ) As I n t e g e r
Fun = a + 10
End F u n c t i o n
Sub t68 ( )
b = 20
MsgBox Fun ( Val ( b ) )
End Sub
1. 0
2. 10
3. 20
4. 30
Вопрос № 69. Что выведет программа на экран?
1
2
3
4
5
6
7
8
9
10
F u n c t i o n SArr ( ParamArray Arr ( ) ) As I n t e g e r
Dim s , i As I n t e g e r
For i = LBound ( Arr ) To UBound ( Arr )
s = s + Arr ( i )
Next i
SArr = s
End F u n c t i o n
Sub t69 ( )
MsgBox SArr ( 1 , 2 , 3 )
End Sub
1. 1, 2, 3
2. 3
3. 6
4. SArr(1, 2, 3)
Вопрос № 70. Для каких целей используется следующая инструкция Debug.Print . . . ?
1. Для вывода данных в окно отладки
2. Для вывода данных на принтер
3. Для вывода данных на экран
4. Данная инструкция отсутствует в VBA
119
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Приложение В
Карта ответов
№ Вопроса
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
1
2
3
4
120
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
№ Вопроса
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
1
2
3
4
121
Документ
Категория
Информатика и программирование
Просмотров
198
Размер файла
9 850 Кб
Теги
excel, основы, офисного, программирование, 3011
1/--страниц
Пожаловаться на содержимое документа