Факультет: Современных компьютерных информационных технологий
Кафедра: Программного обеспечения интеллектуальных систем
Специальность: Программное обеспечение автоматизированных систем
ЗАДАНИЕ НА ТЕХНОЛОГИЧЕСКУЮ ПРАКТИКУ
Студенту | Козаченко Александру Викторовичу | группы | ПО-08а | |||||||||||||||||||||||||||||||
(Фамилия, Имя, Отчество) | ||||||||||||||||||||||||||||||||||
Тема практики | Разработка модуля для базы данных расписаний экзаменаци- | |||||||||||||||||||||||||||||||||
онных сессий ГУииИИ. | ||||||||||||||||||||||||||||||||||
Исходные данные к работе | Шаблон графиков экзаменационных сессий, пре- | |||||||||||||||||||||||||||||||||
доставленных в файле формата xls. | ||||||||||||||||||||||||||||||||||
Перечень искомых результатов | Автоматизация процесса выявления фено- | |||||||||||||||||||||||||||||||||
мена проведения нескольких сессий в одной аудитории, в одно время, проведе- | ||||||||||||||||||||||||||||||||||
ния нескольких сессий для одной группы, в одно время, а так же, выявление пе- | ||||||||||||||||||||||||||||||||||
регрузки преподавателя экзаменами, и проведение нескольких сессий одним | ||||||||||||||||||||||||||||||||||
преподавателем, в одно время. | ||||||||||||||||||||||||||||||||||
Рекомендуемая литература | Уокенбах Д. Профессиональное программирова- | |||||||||||||||||||||||||||||||||
ние на VBA в Excel 2003.: 2005. – 800с.: ил. – Парал. ISBN 5-8459-0771-3(рус); | ||||||||||||||||||||||||||||||||||
Вирт Н. Алгоритмы + структуры данных = программы: Пер. с англ. – М.: Мир, | ||||||||||||||||||||||||||||||||||
1985 – 406 с., ил. | ||||||||||||||||||||||||||||||||||
Дата выдачи задания | 08.06.2011 | |||||||||||||||||||||||||||||||||
Дата защиты проекта | 28.06.2011 | |||||||||||||||||||||||||||||||||
Руководитель | Ковтунов Р.В. | |||||||||||||||||||||||||||||||||
(подпись) | (должность, Ф. И. О) | |||||||||||||||||||||||||||||||||
Глебова И.А. | ||||||||||||||||||||||||||||||||||
(подпись) | (должность, Ф. И. О) | |||||||||||||||||||||||||||||||||
Разработчик | Козаченко А.В. | |||||||||||||||||||||||||||||||||
(подпись) | (Ф. И. О.) | |||||||||||||||||||||||||||||||||
РЕФЕРАТ Технологическая практика: 33 с., 6 рис., 1 табл., 3 приложения. Основным объектом данной технологической практики является программные модули для xls-файла. Целью прохождения технологической практики является получение практических навыков программирования, с целью автоматизации операций внутри документов MS Office, получение навыков разработки надежных программных продуктов, которые будут эксплуатироваться заказчиком в течение длительного времени, а так же, следование многим парадигмам технологии конструирования программных продуктов, включая облегчение дальнейшего сопровождения. Результатами технологической практики является приобретенный опыт работы с заказчиком, разработанный и реализованный надежный программный продукт, согласно требованиям заказчика и стандартам разработки программного обеспечения. Полученный программный модуль автоматизирует работу диспетчерского отдела ГУИиИИ, что значительно повысит эффективность организации проведения экзаменационных сессий. БАЗА ДАННЫХ, EXCEL, VBA, ПРОГРАММНЫЙ МОДУЛЬ, АВТОМАТИЗАЦИЯ | ||||||||||||||||||||||||||||||||||
Д080403.1.01.08/008.ОП | ||||||||||||||||||||||||||||||||||
Фамилия | Подпись | Дата | Разработка модуля для базы данных расписаний экзаменационных сессий ГУИиИИ | Литера | Лист | Листов | ||||||||||||||||||||||||||||
Разработал | Козаченко А.В. | у | ||||||||||||||||||||||||||||||||
Рук. проекта | Ковтунов Р.В. | ГУИИИ, каф. ПОИС, группа ПО-08а | ||||||||||||||||||||||||||||||||
Глебова И.А. | ||||||||||||||||||||||||||||||||||
Зав. каф. | Волченко Е.В. | |||||||||||||||||||||||||||||||||
СОДЕРЖАНИЕ Введение….………...……………………………………………………………..7 1 Постановка задачи……………………………………………………………...9 1.1 Цель создания……………………………………………...…………………9 1.2 Область применения………………………………………………………..11 1.3 Анализ существующих способов решения поставленной задачи….........11 2 Объектная модель EXCEL…………………………………………………....12 2.1 Иерархия объектов……………………………………………………….....12 2.2 Свойства и методы объектов…………………………………………….....13 2.3 Коллекции……………………………………………………………….......13 2.4 Работа с объектами Range…………………………………………………. 13 2.4.1 Свойство Range……………………………………………………………14 2.4.2 Свойство Cells……………………………………………………………. 14 2.4.3 Свойство Offset……………………………………………………………14 3 Элементы языка VBA…….…………………………………...………………16 3.1 История VBA…….………………………………………………………….16 3.2 Комментарии…….…………………………………..………………………16 3.3 Типы данных…………………………………………………...................... 17 3.4 Переменные……………………………………………………………….... 18 3.4.1 Правила именования переменных…….………………………………... 18 3.4.2 Объявление переменных…………………………………………..……...19 3.4.3 Область действия переменных……………………………………..…… 19 3.5 Константы………………………………………...………………………... 19 3.5.1 Объявление констант…………….…………..………………………….. 20 3.6 Массивы...…..………………………………...…………………………….. 20 3.6.1 Объявление массивов….………………...………………………………. 20 3.6.2 Объявление многомерных массивов….………………………………... 20 3.6.3 Динамический массив…………………………………………………… 21 3.6.4 Переменные объектов…………………………………………………… 21 3.6.6 Управление объектами и коллекциями………………………………… 22 3.6.6.1 Конструкция With-End With…………………………………………... 22 3.6.6.2 Конструкция For Each-Next………………………………………….... 22 3.6.7 Контроль над выполнением кода……………………………………….. 22 3.6.7.1 Операторы GoTo………………………………………………….......... 23 3.6.7.2 Конструкция If-Then…………………………………………...………. 23 | ||||||||||||||||||||||||||||||||||
Разработал | Фамилия | Подпись | Дата | Д080403.1.01.08/008.ОП | Лист | |||||||||||||||||||||||||||||
ст. гр. ПО-08а | Козаченко А.В. | |||||||||||||||||||||||||||||||||
СОДЕРЖАНИЕ 3.6.7.3 Конструкция Select Case…………………………………...………….. 23 3.6.8 Циклическая обработка инструкций………………………………...…. 24 3.6.8.1 Циклы for-next………………………………………...……………….. 24 3.6.8.2 Циклы do while и do until…………………………...…………………. 24 3.6.9 Процедуры и функции………………………...………………………… 25 3.6.9.1 Объявление процедуры………………………………...……………… 25 4 Разработка программного модуля..…………………………...……………. 26 4.1 Анализ системы и требований……………………………...…………….. 26 4.2 Проектирование программного продукта……………………………...… 27 4.2.1 Разработка алгоритмов, определение используемых типов данных, переменных и констант, для процедур………………………………………….. 27 4.2.2 Выделение компонентов программного продукта…………………….. 28 4.2.3 Разработка пользовательского интерфейса………………...................... 28 4.3 Кодирование…………………………………………...…………………….31 4.4 Сопровождение………………………………….......................................... 31 4.4.1 Оценка эффективности программного продукта и рассмотрение перспектив модификаций…………………………………………………………. 31 Выводы…………………………………………...……………………………...33 Приложение А. Руководство пользователя……………......…………………. 34 Приложение Б. Листинг модулей……………………………….......................40 Приложение В. Алгоритмы…………………………………………...………. 49 | ||||||||||||||||||||||||||||||||||
Разработал | Фамилия | Подпись | Дата | Д080403.1.01.08/008.ОП | Лист | |||||||||||||||||||||||||||||
ст. гр. ПО-08а | Козаченко А.В. | |||||||||||||||||||||||||||||||||
ПЕРЕЧЕНЬ ОБОЗНАЧЕНИЙ, СИМВОЛОВ, ЕДИНИЦ, СОКРАЩЕНИЙ И ТЕРМИНОВ ПО — Программное обеспечение ПП — Программный продукт ОС — Операционная система ЭВМ — Электронная вычислительная машина БД — База данных ГУИиИИ — Государственный университет информатики и искусственного интеллекта BASIC — аббревиатура от Beginner’s All-purpose Symbolic Instruction Code – универсальный символический язык инструкций для начинающих VB — Visual Basic VBA — Visual Basic for Application (VB для приложений) VBE — Visual Basic Editor (Редактор VB) | ||||||||||||||||||||||||||||||||||
Разработал | Фамилия | Подпись | Дата | Д080403.1.01.08/008.ОП | Лист | |||||||||||||||||||||||||||||
ст. гр. ПО-08а | Козаченко А.В. | |||||||||||||||||||||||||||||||||
ВВЕДЕНИЕ
За всю историю развития человечества, человек в своем ремесле всегда искал помощников: зачастую это были животные, например охотничьи псы автоматизировали процесс добычи дичи, или же, животных заменяли инструменты. Человечество наиболее обязано предшествующему веку именно изобретением ЭВМ, т.к. это является универсальным инструментом для любого вида деятельности, который автоматизирует многие аспекты человеческой деятельности, повышая тем самым эффективность производства и адаптацию под динамичные условия работы.
На сегодняшний день автоматизация происходит всюду:
- контроль работы предприятия, компании, и даже корпорации, ведение бухгалтерских отчетов;
- мониторинг сложных систем;
- производство деталей для оборудований, особенно, где требуется высокая точность - конструирование микрочипов, например.
Приведенный выше список далеко не полон, но все задачи, на которых применяется автоматизация, имеют общую черту: монотонная, рутинная работа, не требующая принятия сложных решений, на каждый случай. То же самое можно сказать о мониторинге: наблюдение за системой и реакция на события, тоже является монотонной работой, а реакция следящей системы бывает самой разной. Для сравнения можно привести работу автомата в электрической сети, задача которого обесточить сеть, в случае перенапряжения, и операционную систему реального времени, которая следит за работой атомного реактора, и принимает решения, в случае одной из тысяч ситуаций дестабилизации реактора.
Из вышеприведенного следует два вывода:
- автоматизация повышает эффективность работы человека, путем лишения его рутинной работы, позволяя ему выполнять более интеллектуальную деятельность;
- автоматизация выполняет работу, которую человек, согласно своим физическим и интеллектуальным возможностям – не в состоянии выполнить быстро, или же не в состоянии справиться с задачей вообще.
Можно приводить массу примеров, где ЭВМ решает жизненно важные задачи, упомянуть автоматизированные системы управления, системы безопасности, интеллектуальные системы принятий решений и многое другое, но, следует перейти непосредственно к рассматриваемой проблеме.
В данной работе, в отличие от вышеприведенных сложных систем автоматизации, необходимо написать небольшой программный модуль, который внесет в большую программу дополнительную, полезную функциональность.
Программа называется MS Excel корпорации Microsoft, в которой есть много полезных, но общих, возможностей. Однако, на данный момент, требуется написать узкоспециализированную программу, ориентированную на конкретную структуру таблиц, которая будет встроена в конкретный файл, который распознает программа MS Excel.
На самом деле, существует множество полезных, настраиваемых, но сложных программных продуктов, от которых можно было бы добиться желаемой функциональности. Такие продукты, как 1C, MS DAX (Axapta) и прочие, являются новой ветвью эволюции программного обеспечения, которая берет свое начало на узкоспециализированных программных модулях. Однако, освоение подобных программных продуктов требует много затрат, зачастую не достойных, для решения одной или двух простых задач.
По этой причине, в течение текущей технологической практики, требуется расширить возможности программного продукта MS Excel для решения специализированной задачи, и существенной автоматизации и, следовательно, повышения эффективности работы диспетчерского отдела ГУИиИИ.
1 ПОСТАНОВКА ЗАДАЧИ
1.1 Цель создания
Целью создания данного проекта является острая необходимость в автоматизации работы диспетчерского отдела ГУИиИИ, а в именно: необходимо написать программный модуль, который с помощью главной таблицы (рисунок 1.1) будет определять накладки (коллизии, конфликты) в расписании экзаменационных сессий (рисунок 1.2, рисунок 1.3).
Накладкой является следующие явления:
- проведения более одной сессии преподавателем в одно время;
- проведение более одной сессии для одной учебной группы (или потока), в одно время;
- проведение более одной сессии для нескольких учебных групп (или потока), в одной аудитории.
Помимо вышеперечисленного, также необходимо отслеживать ситуацию перегрузки преподавателя. В текущей конфигурации, максимальное количество сессий в день, для одного преподавателя равняется четырем (рисунок 1.1).
Рисунок 1.1 – Фрагмент таблицы «Всего по кафедрам»
На рисунках 1.2 и 1.3 представлены все существующие, на данный момент, варианты структур таблиц, для которых необходимо выполнять обработку конфликтов.
Рисунок 1.2 – Фрагмент таблицы «Расписание»
Рисунок 1.3 – Фрагмент таблицы «Пересдача»
Согласно постановке задачи, из таблиц «Расписание», «Пересдача» и «Пересдача (комиссии)» должны переноситься записи в таблицу «Всего по кафедрам» и в случае вышеприведенных случаев конфликта – оповещать об этом пользователя. У таблицы «Пересдача (комиссии)» структура подобна таблице «Пересдача».
1.2 Область применения
Данный проект является узкоспециализированным и применим только к работе диспетчерского отдела, однако, программа может быть спроектирована таким образом, что можно было бы подстроить ее под любую структуру таблиц, следовательно, при правильном проектировании, полученный продукт может быть применен для любой подобной таблицы, или даже расширена, в случае добавления новых требований.
1.3 Анализ существующих способов решения поставленной задачи
Для решения поставленной задачи, как было указанно выше, можно было бы выбрать другой программный продукт, например 1С, и, настроив его, автоматизировать процесс выявления накладок. Однако, данный способ связан с переносом базы данных в другую среду, обучением персонала работы в 1С, а также – существование множества лишних возможностей.
Помимо этого, можно написать отдельную программу, на любом языке программирования, который, может быть, сможет выполнять процесс быстрее встроенного языка программирования, но этот вариант неприемлем, ввиду малого количества времени, для реализации поставленной задачи.
Следовательно, самым приемлемым вариантом будет использование встроенного редактора VBE, внутри программы MS Excel, что позволит напрямую выполнять поставленную задачу, не отвлекаясь на множество тонкостей реализации, и исключая затраты времени на продолжительную отладку. Встроенный язык VBA и объектная модель Excel хорошо отлажена профессиональными разработчиками, что гарантирует отказоустойчивую программу, при условии правильной разработки алгоритмов.
2 ОБЪЕКТНАЯ МОДЕЛЬ EXCEL
Основа программирования для любого продукта из пакета MS Office заключается в объектной модели каждого продукта. Приложением можно управлять программным образом, только с помощью объектов, которые представлены в этом приложении.
Например, в объектной модели Excel представлено несколько мощных объектов анализа данных, например, рабочие листы, диаграммы, сводные таблицы, сценарии, а также многочисленные математические, финансовые, инженерные и общие функции. С помощью VBA существует возможность работы с этими объектами.
2.1 Иерархия объектов
Excel позволяет управлять более, чем ста классами объектов, включая рабочую книгу, рабочий лист, диапазон ячеек рабочего листа, диаграмму и нарисованный прямоугольник.
Объекты могут выступать контейнерами других объектов. Например, Excel – это объект под названием Application, он содержит другие объекты, например, Workbook (рабочая книга). Объект Workbook может состоять из других объектов, например, Worksheet (рабочий лист) и Chart (диаграмма). Объект Worksheet также содержит объекты, например, Range (диапазон), PrivotTable (сводная таблица) и т.д. Организацию таких объектов называют объектной моделью Excel.
Объект Application (т.е. Excel) содержит другие объекты. Ниже приведено несколько примеров объектов, которые находятся в объекте Application:
- Workbooks – коллекция всех объектов Workbook – рабочих книг;
- Windows – коллекция всех объектов Window – окон;
- AddIns – коллекция всех объектов AddIn – надстроек.
Некоторые объекты могут содержать другие объекты. Например, коллекция Workbooks состоит из всех открытых объектов Workbook, а объект Workbook включает другие объекты, некоторые из которых представлены ниже:
- Worksheets – коллекция объектов Worksheet – рабочих листов;
- Charts – коллекция объектов Chart – диаграмм;
- Names – коллекция объектов Name – имен.
Каждый из этих объектов, в свою очередь, может содержать другие объекты. Коллекция Worksheets состоит из всех объектов Worksheet рабочей книги Workbook. Объект Worksheet включает другие объекты, среди которых следующие:
- ChartObjects – коллекция объектов ChartObject – элементов диаграмм;
- Range – диапазон;
- PageSetup – параметры страницы;
- PivotTables – коллекция объектов PivotTable – сводных таблиц.
При ссылке на объект, вложенный в другой объект, положение в иерархической структуре объектной модели задается с помощью точки-разделителя. Например, на рабочую книгу, с названием Книга1.xls можно сослаться следующим образом:
Application.Workbooks (“Книга1.xls”)
Это ссылка на рабочую книгу Книга1.xls в коллекции Workbooks. Колллекция Workbooks находится в объекте Application. Переходя на следующий уровень, можно сослаться на лист Лист1 в книге Книга1.xls:
Application.Workbooks(“Книга1.xls”).Worksheets(“Лист1”).Range(“A1”)
2.2 Свойства и методы объектов
Все объекты имеют свойства. Например, объект диапазона имеет такие свойства, как Value и Name. Свойства в программном коде отделяются от названия объекта точкой.
Также, объекты обладают методами. Метод - это действие, которое выполняется над объектом. Например, один из методов объекта Range – ClearContents. Этот метод удаляет содержимое диапазона ячеек.
2.3 Коллекции
Одной из ключевых концепций в программировании на языке VBA являются коллекции.
Коллекции – это группа объектов одного класса (и сама коллекция является объектов).
Можно управлять одновременно целой коллекцией объектов, или отдельным объектом этой коллекции. Чтобы сослаться на один объект из коллекции, нужно ввести название или номер объекта в скобках после названия коллекции или указать в скобках номер объекта в коллекции:
Worksheets (“Лист1”) или Worksheets(1)
Так же, для управления коллекциями существует конструкция For-Each In, которая будет описана ниже.
2.4 Работа с объектами Range
В основном, работа, которая выполняется в VBA, связана с управлением ячейками и диапазонами на рабочих листах, что и является основным предназначением электронных таблиц.
Объект Range содержится в объекте Worksheet и состоит из одной ячейки или диапазона ячеек на отдельном рабочем листе. Существует три способа задания ссылки на объекты Range в программе VBA:
- Свойство Range объекта класса Worksheet или Range;
- Свойство Cells объекта Worksheet;
- Свойство Offset объекта Range.
2.4.1 Свойство Range
Свойство Range возвращает объект Range. К нему можно обратиться с помощью нескольких вариантов синтаксиса:
- Объект.Range(ячейка1);
- Объект.Range(ячейка1,ячейка2).
Свойство Range относится к одному из двух типов объектов: объекту Worksheet или объекту Range. В данном случае ячейка1 и ячейка 2 указывают параметры, которые Excel будет воспринимать как идентифицирующие диапазон (в первом случае) или очерчивающие диапазон (во втором случае).
2.4.2 Свойство Cells
Другим способом сослаться на диапазон является использование свойства Cells. Подобно Range, свойство Cells может использоваться в объектах Worksheet и Range. Существует три варианта свойства Cells:
- Объект.Cells(номер_строки, номер_столбца);
- Объект.Cells(номер_строки);
- Объект.Cells.
Первый вариант обращается к ячейке, которая находится на пересечении указанных строки и столбца.
Второй способ, индексирует ячейки так, словно они представляют собой одномерный массив. Например, выбран диапазон A1:B2, и если из этого диапазона обратиться к третьей клетке, то выбрана будет клетка A2.
Третий вариант выделяет все ячейки данного объекта (листа, или объекта Range).
2.4.3 Свойство Offset
Свойство Offset (подобно свойства Range и Cells) также возвращает объект Range. В отличие от рассмотренных выше свойств, Offset применяется только к объекту Range и ни к какому другому. Данное свойство использует единственный синтаксис:
- объект.Offset(сдвиг_строки,сдвиг_столбца).
Два аргумента свойства Offset соответствуют смещению относительно левой верхней ячейки указанного диапазона Range. Эти аргументы могут быть положительными (сдвиг вниз или вправо), отрицательными (вверх или влево) или нулевыми.
Данное свойство особенно полезно при активной работе с ячейками: использование свойства Offset значительно ускоряет процесс расшифровки ссылки. Дело в том, что при каждом обращении по ссылке, например Worksheets(1).Range(“A1:B10”).Cells(1), программа расшифровывает каждый уровень иерархии: сначала расшифровывается, что нужно обратиться к первому листу текущей книги, затем расшифровывается, что нужно обратиться к диапазону A1:B10, после этого расшифровывается, что нужно обратиться к первой ячейке. Есть много способов упростить расшифровку. Например, использовать конструкцию With, присваивать имена ссылкам, или использовать Offset, при активной работе с ячейками.
3 ЭЛЕМЕНТЫ ЯЗЫКА VBA
Знание объектной модели, как было написано выше, раскрывает неограниченные возможности по манипулированию над программой, однако, без знания элементов языка VBA невозможно реализация алгоритмов работы с этими объектами. Язык VBA поддерживает множество популярных конструкций, таких как циклы for, do-while, do-until, переход по меткам, простые и сложные условные операторы и многое другое.
3.1 История VBA
VBA – это стандартный язык написания сценариев для приложений Microsoft, в настоящее время он входит во все приложения пакета MS Office, и даже в приложения других компаний.
VB (Visual Basic) – это продукт компании Microsoft, который выпущен с целью облегчения массовой разработки приложений для Windows. Первая версия выпущена в 1991 году. Visual Basic имеет немного общего с ранними версиями BASIC, но последний представляет собой основу, на которой построен VBA.
До появления VB, многие опытные программисты не воспринимали идею программирования на BASIC всерьез. Само название предполагает, что это не профессиональный язык. Действительно, BASIC был разраотан в начале 1960-х годов и задумывался как наглядное средство преподавания методов программирования студентам колледжей. BASIC довольно быстро приобрел большую популярность, и сейчас он поддерживается многими типами компьютеров.
Как было описано выше – VBA поддерживает множество конструкций – от современных вариантов циклов For, до старых, ассемблерных инструкций GoTo.
3.2 Комментарии
Комментарий – это описательный текст, который включается в код. VBA полностью игнорирует текст комментария. Комментарии можно использовать самым произвольным образом для описаний действий в коде (предназначение оператора не всегда очевидно, например).
Комментарий обозначается апострофом. VBA игнорирует любой текст, введенный после апострофа – за исключением случаев, когда апостроф заключен в кавычки.
Использование комментариев – удачная идея, но не все комментарии в равной степени предпочтительны. Чтобы комментарий был полезен, он должен содержать информацию, которая неочевидна при рассмотрении самого кода.
3.3 Типы данных
VBA облегчает жизнь программистам, автоматически обрабатывая любые типы данных. Не во всех языках программирования управление данными выполняется на столь простом уровне. Например, многие языки программирования являются строго типизированными, т.е. программист должен явно объявлять тип данных каждой используемой переменной.
В таблице 3.1 перечислены поддерживаемые в VBA типы данных.
Таблица 3.1 – встроенные типы данных VBA
Тип данных | Резервируется байт | Диапазон значений |
Byte | 1 байт | От 0 до 255 |
Boolean | 2 байта | True (Истина) или False(Ложь) |
Integer | 2 байта | От -32768 до 32767 |
Long | 4 байта | От -2147483648 до 2147483647 |
Single | 4 байта | От -3,402823Е38 до -1,4011298Е-45 (для отрицательных значений); от 1,401298Е-45 до 3,402823Е38 (для положительных значений) |
Double | 8 байт | От –1,79769313486232Е308 до –4,94065645841247Е-324 (отрицательные числа); от 4,94065645841247Е-324 до 1,79769313486232Е308 (положительные числа) |
Currency | 8 байт | От –922337203685477,5808 до 922337203685477,5807 |
Таблица 2.1 – встроенные типы данных VBA (продолжение) | ||
Тип данных | Резервируется байт | Диапазон значений |
Decimal | 14 байт | +/–79228162514264337593543950335 без десятичных знаков; +/–7,9228162514264337593543950335 с 28-ю знаками после запятой |
Date | 8 байт | С 1 января 100 года до 31 декабря 9999 года |
Object | 4 байта | Любая ссылка на объект |
String (переменной длины) | 10 байт + длина строки | От 0 до ~ 2млрд. |
String (фиксированной длины) | Длина строки | От 1 до ~65400 |
Variant (числа) | 16 байт | Любое числовое значение в рамках диапазона данных Double |
Variant (символы) | 22 байта + длина строки | От 0 до ~ 2 млрд. |
Пользовательский | Зависит от типа | Зависит от элемента |
Тип данных указывает, в каком виде данные хранятся в памяти: как целые значения, действительные числа, текст и т.п. VBA может автоматически типизировать данные, однако это чревато негативными последствиями – медленное выполнение операций и менее эффективное использование памяти.
Если тип данных, для переменной, не объявлен в процедуре VBA, по умолчанию будет задан тип данных Variant. Данные с типом Variant имеют только одно, заслуживающее внимания, свойство: они изменяют свой тип, в зависимости от того, какие операции над ними выполняются. Однако, зачастую, результат операций над переменными типа Variant не оправдывают ожидания. Например, если в переменную записать числовую строку, а затем суммировать саму с собой, то в результате будет не сумма, и тип данных – число, а объединение двух строк.
VBA позволяет работать с переменной без объявления, т.е. если в коде встречается имя, которое не является объектом, функцией, зарезервированным словом и т.п. – выделяется память, под переменную типа Variant, которая подписывается встреченным именем.
Часто бывает, что новое имя порождается в результате опечатки.
Более того, явное объявление переменной в начале процедуры облегчает понимание алгоритма программы, и использование переменных фиксированного типа, увеличивает быстродействие программы в два раза.
Для исключение случайного выделения переменной, можно написать в начале модуля инструкцию Option Explicit, которая, подобно строго типизированным языкам, заставит компилятор генерировать ошибку, в случае использования необъявленной переменной.
3.4 Переменные
Главное предназначение VBA – обработка данных. Некоторые данные сохраняются в объектах, например, диапазонах рабочих листов. Другие данные хранятся в созданных переменных.
Переменная представляет собой именованное место хранения данных в памяти компьютера. Переменные могут содержать данные разных типов – от простых логических значений, до больших значений с двойной точностью. Значение присваивается переменной с помощью оператора равенства.
3.4.1 Правила именования переменных
VBA поддерживает несколько правил, которые ограничивают пользователя в именовании переменных:
- можно использовать в названиях символы букв, числа и некоторые знаки препинания, но первой в имени переменной всегда должна вводиться буква;
- VBA не различает регистры;
- нельзя использовать в именах пробелы или точки;
- специальные символы объявления типов (#,$,%,& или!) также не применяются в имени переменной;
- названия переменных ограничены длиной 254 символов.
3.4.2 Объявление переменных
Наиболее популярный способ объявить локальную переменную – вставить оператор Dim. Между операторами Sub и End Sub. Операторы Dim обычно вводятся непосредственно после оператора Sub, перед кодом процедуры.
Ключевое слово Dim в BASIC использовалось исключительно для объявления размерности массива (от слова Dimension – Размерность). В VBA ключевое слово Dim применяется для объявления любой переменной, а не только массивов.
Синтаксис оператора Dim приведен ниже(В удобочитаемом виде. Переменные объявляются в одну строку):
Dim <переменная_1> [As <тип_данных]
[,<переменная_2> [As <тип_данных]]
[…., <переменная_n> [As <тип_данных] ]
Если часть As опущена, то переменная имеет тип данных Variant.
Следует отметить, что в отличие от других языков программирования, в VBA нельзя объявить тип данных одновременно для группы переменных, разделив переменные запятыми.
3.4.3 Область действия переменных
Область действия переменных определяет, в каких модулях и процедурах она может использоваться. Существует следующие типы областей действия переменных:
- отдельная процедура (В процедуру включается оператор Dim или Static);
- отдельный модуль (Перед первой процедурой в модуле вводится оператор Dim или Private);
- все модули (Перед первой процедурой в модуле вводится оператор Public).
3.5 Константы
Значение переменной может изменяться при выполнении процедуры. Иногда же необходимо использовать именованное значение или строку, которая никогда не меняется – константу.
3.5.1 Объявление констант
Константы объявляются с помощью оператора Const, аналогично объявлению с помощью оператора Dim (В удобочитаемом виде. Переменные объявляются в одну строку):
Const <переменная_1> [As <тип_данных] = <значение>
[,<переменная_2> [As <тип_данных] = <значение> ]
[…., <переменная_n> [As <тип_данных] = <значение>]
Если объявить константу в начале модуля – она будет видима во всех процедурах модуля. Если же объявить внутри процедуры или функции – то в других процедурах эта константа не будет видна.
3.6 Массивы
Массив – это группа элементов одного типа, которые имеют общее имя; на конкретный элемент массива ссылаются, используя имя массива и индекс.
3.6.1 Объявление массивов
Массив, как и обычные переменные, объявляются с помощью операторов Dim или Public. Кроме того, можно определить количество элементов в массиве. Синтаксис объявления одного массива выглядит следующим образом:
Dim <имя_массива> ([[нижний_предел To] <верхний_предел>]) [As <тип_данных>]
Нумерация элементов в массиве начинается с нуля, однако, это можно изменить, с помощью инструкции:
Option Base <начало_нумерации_массива>
3.6.2 Объявление многомерных массивов
Массивы VBA могут иметь до 60-ти измерений, хотя на самом деле используется не более трех. Для объявление многомерного массива, следует использовать следующий синтаксис:
Dim <имя_массива> ([измерение_1][,измерение_2][…][,измерение_60]) [As <тип_данных>]
Где измерение объявляется так:
[[<нижний_предел> To] <верхний_предел>]
Для обращения к элементу массива, достаточно указать номер элемента в скобках:
<имя_массива> (<номер_измерение_1>[,…][,номер_измерение_60])
Например:
MyArray(3,4)
3.6.3 Динамический массив
Динамический массив не имеет предопределенного количества элементов. Динамический массив объявляется с незаполненными значениями в скобках:
Dim <имя_массива> () [As Тип_данных]
Тем не менее, прежде чем динамический массив можно будет использовать в программе, необходимо обратиться к оператору ReDim, указывающему VBA, сколько элементов находится в массиве.
3.6.4 Переменные объектов
Переменная объекта – это переменная, представляющая целый объект, например, диапазон или рабочий лист. Переменные объектов имеют особое значение по следующим причинам:
- значительно упрощают программу;
- ускоряют выполнение программы.
Переменные объектов, как и обычные переменные, объявляются с помощью оператора Dim или Public, но для работы с этой переменной, необходимо связать ее с объектом, с помощью оператора Set:
Set <имя_переменной> = <объект>
3.6.5 Пользовательские типы данных
VBA позволяет создавать специальные, или пользовательские, типы данных. Определенный пользователем тип данных может облегчить управление некоторыми типами данных. Для описания пользовательского типа данных используется ключевое слово Type в начале модуля:
Type <имя_типа_данных>
<переменная_1> [As <тип_данных>]
[, <переменная_2> [As <тип_данных>] ]
[,…]
[,<переменная_n> [As <тип_данных>]
End Type
После объявления пользовательского типа данных, экземпляры можно создавать оператором dim или public.
3.6.6 Управление объектами и коллекциями
VBA предлагает две конструкции, которые упрощают управление объектами и коллекциями:
- конструкция With-End With;
- конструкция For Each-Next.
Ниже будут рассмотрены эти конструкции.
3.6.6.1 Конструкция With-End With
Конструкция With-End With позволяет выполнять несколько операций над одним объектом. Эта конструкция позволяет удерживать ссылку на объект, чтоб упростить расшифровку ссылок. Например:
With Range(“A1:B10”).Font
.Name = “Times New Roman”
.Size = 12
.Bold = True
End With
Вышеприведенный код работает с шрифтом диапазона ячеек «А1:B10», и вместо того, чтоб три(три обращения к свойствам, в коде) раза расшифровать одну и ту же ссылку Range(“”A1:B10”).Font, With захватывает эту ссылку, и расшифровывает только ту часть, которая находится между With и End With, что значительно ускоряет время работы программы.
3.6.6.2 Конструкция For Each-Next
Как было описано выше, коллекция – это группа однородных объектов. Конструкция For Each-Next инкапсулирует цикл обращений к объектам коллекций (т.е. можно было бы работать с коллекцией, с помощью любого цикла и итератора, который стремился бы к значению, которое обозначает количество объектов в коллекции).
Синтаксис конструкции For Each-Next приведен ниже:
For Each-Next <Элемент> In <коллекция>
[инструкции]
Next [Элемент]
3.6.7 Контроль над выполнением кода
Некоторые процедуры VBA начинают выполняться с первых строк кода. Этот процесс производится построчно до конца процедуры. Однако порой необходимо контролировать последовательность операций, пропуская отдельные операторы, повторно выполняя некоторые команды и проверяя условия для определения следующего действия, выполняемого процедурой. Существуют следующие способы контроля над выполнением кода:
- операторы GoTo;
- конструкции If-Then;
- конструкции Select-Case;
- циклы For-Next;
- циклы Do While;
- циклы Do Until.
3.6.7.1 Операторы GoTo
Самый простой способ изменить последовательность операций в коде – использовать оператор GoTo. Он перенаправляет ход выполнения программы на новую помеченную инструкцию. Метка – это текстовая строка, заканчивающаяся двоеточием, или число без двоеточия, указанные перед инструкцией.
Процедуры VBA могут содержать любое количество меток, а оператор GoTo не определяет переход за пределы процедуры.
Синтаксис оператора GoTo выглядит следующим образом:
GoTo <Метка>
Например:
Цикл: i =i+1
If (i<7)Then GoTo Цикл End If
3.6.7.2 Конструкция If-Then
Данная конструкция позволяет процедуре принимать логические решения, или, выполнять определенные инструкции, в зависимости от условий. Синтаксис конструкции таков:
If <условия> Then <инструкции_истина> [Else инструкции_ложь]
Если условие истинно, то выполняются инструкции после ключевого слова Then, иначе – либо выполняются инструкции после слова Else, а в случае отсутствия оного – программа выходит из конструкции If-Then
3.6.7.3 Конструкция Select Case
Конструкция Select Case применяется при выборе между тремя или более вариантами. Она справедлива также для двух вариантов, и является хорошей альтернативой структуре If-Then-Else. Конструкция Select Case обладает следующим синтаксисом:
Select Case <тестируемое_выражение>
[Case <список_условий>
[операторы]]
[Case Else
[операторы_по_умолчанию]]
End Select
3.6.8 Циклическая обработка инструкций
Цикл – это процесс повторения набора инструкций. В первом языке программирования – Ассемблере, циклы конструировались с помощью условных операторов, меток, и оператора GoTo. Однако от этой концепции быстро отказались, так как использование оператора GoTo делает программу невозможной для понимания. Как было описано выше, VBA поддерживает как старые, так и современные конструкции. GoTo относится к старым конструкциям, унаследованным от BASIC. Для построения циклов в VBA используются следующие конструкции:
- циклы for-next;
- циклы do while;
- циклы do until.
Все циклы имеют общую черту – для досрочного завершения цикла используется оператор Exit, с указанием имени цикла: для for-next – exit for, для do while или do until - end do.
Далее будут рассмотрены эти конструкции.
3.6.8.1 Циклы for-next
Оператор for–next является самым простым способом задания цикла. Однако, если итератор цикла изменять в теле цикла, то могут произойти непредвиденные последствия.
Этот оператор имеет следующий синтаксис:
For <счетчик> = <начало> To <конец> [Step <шаг>]
[инструкции]
Next [счетчик]
3.6.8.2 Циклы do while и do until
Do while является классической циклической структурой. В отличие от цикла For-Next, цикл Do While выполняется до тех пор, пока удовлетворяется заданное условие, цикл Do While может иметь один из двух синтаксисов:
Цикл с предусловием
Do [While <Условие>]
[инструкции]
Loop
Или с постусловием
Do
[инструкции]
Loop [While <Условие>]
Разница между Do While и Do Until заключается в условиях продолжения цикла: в цикл Do While прерывается, когда условие становится ложным, а Do Until прерывается, когда условие становится истинным (то есть выполняется, пока условие не станет выполняться).
Разница между цикла с предусловием и с постусловием заключается в моменте проверки истинности выражения: в циклах с предусловием сначала проверяется условие, затем выполняется тело цикла, а в постусловии – наоборот, сначала выполняется условие, затем проверяется выражение.
Следовательно, циклы с постусловием выполнятся хотя бы один раз, а циклы с предусловием могут ни разу не выполниться.
3.6.9 Процедуры и функции
Процедура – это последовательность операторов VBA, расположенная в модуле VBA, к которому можно получить доступ, с помощью VBE. Модуль может включать любое количество процедур.
Существует несколько способов вызвать, или выполнить, процедуры. Процедура выполняется от начала до конца (однако, выполнение процедуры можно прервать, с помощью оператора Exit).
Некоторые процедуры получают аргументы. Аргумент – это информация, используемая процедурой в процессе выполнения. Аргументы процедуры во многом подобны аргументам, используемым функциями Excel. Инструкции в процедуре обычно выполняют логические операции над аргументами, а результаты процедуры обычно основаны на представляемых ей аргументах.
Всё, что сказано ниже для процедур, справедливо для функций, с той разницей, что процедура определяется ключевым словом Sub, а функция – Function.
Функции способны вернуть некое значение в процедуру, откуда функция была вызвана. Так же, функция может быть использована в ячейке, после знака =. Например «=MyFun()» справедливо для содержимого ячейки, если функция MyFun есть в модуле и она имеет доступ Public.
3.6.9.1 Объявление процедуры
При объявлении процедуры, с использованием ключевого слова Sub, необходимо придерживаться следующего синтаксиса:
[Private | Public ] [Static] Sub <имя_процедуры> ([список_аргументов])
[инструкции]
End Sub
Процедуры могут обладать разными областями видимости:
- private – указывает на то, что процедура доступна из других процедур, но в пределах модуля;
- public – указывает на то, что процедура доступна для всех остальных модулей.
4 РАЗРАБОТКА ПРОГРАММНОГО МОДУЛЯ
Используя знания об элементах языка VBA и объектной модели Excel, можно приступать к решению поставленной задачи – проектирование программного модуля, который будет выявлять накладки в расписании сессий.
В ходе разработки данного программного продукта были выделены этапы проектирования, которые формируют подробный фрагмент жизненного цикла, вплоть до реализации:
1. Анализ системы, и анализ требований.
a. Анализ системы, в которую будет внедрен модуль. Определение способа взаимодействия модуля с системой.
b. Определение требований к программному продукту.
2. Проектирование программного продукта.
a. Разработка алгоритмов, определение используемых типов данных, переменных и констант, для процедур.
b. Выделение компонентов программного продукта.
c. Разработка пользовательского интерфейса.
3. Кодирование.
4. Тестирование.
a. Тестирование процедур с помощью трассировки алгоритмов.
b. Тестирование процедур с помощью испытаний.
5. Сопровождение.
a. Написание документации программы (которая включена в данный отчет).
b. Написание руководства пользователя.
c. Оценка модели заказчиком.
d. Оценка эффективности программного продукта и рассмотрение перспектив модификаций.
Некоторые этапы могут быть объединены, другие – разделены, для более подробного описания, но, тем не менее, жизненный цикл требуемого программного продукта пройдет намеченный путь.
4.1 Анализ системы и требований
Согласно рисункам 1.1, 1.2 и 1.3 исходный xls файл имеет три вида таблиц – главная таблица, таблица сессий и таблица пересдач. Отсюда следует вывод, что, возможно, потребуется создать три процедуры, для каждой таблицы, ввиду того, что у таблиц разная структура, а для главной таблицы, возможно, понадобится элемент управления, который наполнит ее всеми записями из всех необходимых таблиц.
Исходя из требований к проекту, программа должна четко выявлять накладки, по разным критериям. То есть, надежная и безошибочная работа программы – основное требование, которое будет выполнено, путем разработки безошибочных алгоритмов.
4.2 Проектирование программного продукта
На данном этапе выполняется основная работа по созданию программного продукта – разработка архитектуры системы, выделение в ней процедур, вспомогательных функций и разработка алгоритмов.
4.2.1 Разработка алгоритмов, определение используемых типов данных, переменных и констант, для процедур
Как было упомянуто в пункте 4.1, вероятно, потребуется делать три процедуры, для разных видов таблиц. Однако данный подход противоречит хорошему стилю программирования – следует сделать одну параметризированную процедуру, которая может изменять свое поведение, в зависимости от параметров, а процедура главной таблицы должна будет вызывать эту процедуру с разными параметрами для своих подотчетных таблиц. Такой подход упростит отладку программы.
Итак, требуется разработать параметризированную процедуру выявления накладок для таблиц. Проще создать процедуру, которая будет заполнять главную таблицами записями определенной таблицы, чем создавать один большой алгоритм для проверки всех таблиц.
Разработанная процедура обладает следующим алгоритмом:
1. Посчитать количество преподавателей в таблице «Всего по кафедрам».
2. Для каждого преподавателя, в таблице «Всего по кафедрам» найти соответствие по ФИО в таблице, откуда вызвана процедура.
3. В случае находки соответствия, запомнить дату проведения экзамена, и найти соответствие даты в таблице «Всего по кафедрам».
4. Если соответствие найдено, то ищется свободная ячейка в соответствующем столбце, для соответствующего преподавателя, заодно проверяя, не занят ли преподаватель другим экзаменом в это же время. Если соответствия не найдено, то дата помечается красным, и алгоритм продолжает работу.
5. Если свободной ячейки не найдено – генерируется ошибка, иначе свободная ячейка заполняется экзаменом.
6. Проверяется весь столбец, на наличие коллизий, с помощью процедуры «ПроверкаНакладок».
Алгоритм процедуры проверки накладок имеет два входных параметра – это номер столбца, который нужно проверить и количество строк в таблице «Всего по кафедрам»:
1. Посчитать количество непустых ячеек в столбце.
2. Если количество непустых ячеек равно нулю, то выход из процедуры, иначе, выделяется память для массива пользовательского типа, с количеством ячеек равным количества непустых ячеек.
3. Пользовательский массив заполняется данными из непустых ячеек.
4. Находится минимальное и максимальное время проведения сессий.
5. Итератор изменяется от минимального значения времени, до максимального, увеличиваясь на час в каждой итерации. Значение итератора сравнивается со значением времени каждого элемента, и в случае соответствия – элемент подвергается сортировке.
6. В отсортированном, по времени, массиве, можно выделить группы однородных, по времени, объектов. Эти группы сортируются внутри себя, сначала по аудиториям, затем по потокам, и если внутри одной временной группы есть две одинаковые аудитории, или два одинаковых потока – происходит коллизия.
Вышеперечисленные алгоритмы детально описаны с помощью R-схем в приложении В.
4.2.2 Выделение компонентов программного продукта
Изначально, проект создавался в одном модуле, в котором были и процедуры, алгоритмы которых описаны выше, и константы, которые в них используются, и процедуры, которые используются для вызова этих процедур.
Однако этот подход превращает, даже такую скромную систему, в монолит. Стоит выделить в этой монолитной системе компоненты, что позволит упростить сопровождение продукта.
В результате анализа процедур, было выделено три модуля (рисунок 4.1):
- модуль процедур, выполняющих поставленную задачу (ядро);
- модуль процедур, вызывающих процедуры ядра (интерфейс);
- модуль констант, для настройки программы.
4.2.3 Разработка пользовательского интерфейса
Согласно требованиям заказчика, необходимо, чтоб заполнялась таблица «Всего по кафедрам» из остальных таблиц, и выявлялись накладки. Можно обеспечить выполнение соответствующих процедур двумя способами:
1. Разместить на каждой таблице кнопку для заполнения данных из этой таблицы.
2. Разместить на таблице «Всего по кафедрам» кнопку, которая заполнит эту таблицу всеми данными.
Оба способа имеют свои достоинства и недостатки. Если разместить на каждой таблице кнопку для вызова процедуры, то это может быть неудобным, когда нужно заполнить таблицу «Всего по кафедрам» полностью.
Рисунок 4.1 – Диаграмма компонентов системы
С другой стороны, если поместить кнопку на таблице «Всего по кафедрам», тогда пользователь будет лишен возможности проверять накладки исключительно для определенной таблицы.
Исходя из этой дилеммы, было принято решение: поместить кнопку вызова процедуры на каждой таблице, в том числе и на таблице «Всего по кафедрам», с той разницей, что та кнопка, по очереди вызывает процедуры от остальных кнопок (рисунок 4.2)
Кнопки, расположенные в таблицах «Пересдача» и «Пересдача (комиссии)» вызывают процедуру из модуля интерфейсов:
Sub ВызовДиспетчераДляПересдач()
ГенерацияОтчета 1, 2, 6, 3, 4, 5, 6, 20
End Sub
А кнопка в таблице «Расписание» вызывает другую процедуру, которая, в свою очередь, вызывает процедуру из ядра, с указанием других параметров:
Sub ВызовДиспетчераДляСдач()
ГенерацияОтчета 6, 7, 6, 3, 4, 5, 2, 20
End Sub
Рисунок 4.2 – Кнопки, для заполнения таблицы «Всего по кафедрам» из текущей таблицы
На рисунке 4.3 показаны две кнопки: одна кнопка, вызывает процедуру заполнения для всех таблиц («Заполнить»), а другая – очищает цвет ячеек для всех таблиц, и очищает рабочее поле таблицы «Всего по кафедрам» («Очистить»).
Рисунок 4.3 – Кнопки в таблице «Всего по кафедрам»
4.3 Кодирование
Процесс кодирования тесно сплетен с процессом проектирования. Ввиду того, что на разработку проекта были поставлены малые сроки, активно применялись парадигмы экстремального программирования, что значительно ускорило процесс написания исходного кода, командой из двух человек: код постоянно перерабатывался (принцип «рефакторинг»), релизы были короткими – интервал: два дня (принцип коротких интервалов), тестирование происходило сразу после написания процедур.
4.4 Сопровождение
Теперь, когда проект готов, следует написать соответствующую документацию, которая включает в себя данный отчет и руководство пользователя.
Руководство пользователя написано в приложении А.
4.4.1 Оценка эффективности программного продукта и рассмотрение перспектив модификаций
Испытания процедур показали, что обход ячеек таблиц занимает длительное время, что снижает эффективность программы. В дальнейшем, возможно, полное копирование данных из таблиц в виртуальную память, для быстрого доступа к этим данным. А так же – активное использование свойств Offset и конструкций With –End With.
Более того, программе не хватает диалоговых окон для предварительной настройки программы:
- настройка цветов ошибок;
- настройка параметров функций ядра;
- улучшение алгоритмов, использование более эффективных методов сортировки.
ВЫВОДЫ
Одних познаний в объектной модели Excel и элементов языка VBA недостаточно, для осуществления проекта на профессиональном уровне. Полученная программа, является результатом некого симбиоза дисциплин, которые изучались, по сей день:
- познания в теории алгоритмов позволили быстро соорудить рабочий алгоритм, который выполняет поставленную задачу;
- программная инженерия обеспечивает правильный стиль разработки – программа, из монолитной системы, превратилась в компонентную, а стиль написания кода, в том числе и правила именований переменных и констант, позволили создать удобочитаемый и легкосопровождаемый код;
- знание инженерных принципов создания ПО обеспечили комфортное, как для разработчиков, так и для заказчика, взаимодействие. Более того, применение парадигм технологий конструирования ПО систематизировало процесс разработки проекта, и применение методологий экстремального программирование повысило эффективность работы команды разработчиков;
- с помощью теории баз данных было выполнено преобразование отношения исходного объекта в более удобное, для анализа, что привело к упрощению обработки существующей базы данных;
- юзабилити, как подраздел эргономики, обеспечило создание удобного, для пользователя, интерфейса;
- элементы системного анализа, которые преподаются в дисциплине «Алгоритмы и структуры данных» позволили оценить эффективность полученных алгоритмов, более того, рассмотреть перспективу модификации алгоритмов, с целью повышения скорости работы программы.
Исходя из вышеописанного, следует прийти к выводу, что в ходе обучения были приобретены ценные навыки и знания, которые позволяют создавать эффективное, удобное, востребованное и легкосопровождаемое ПО.
ПРИЛОЖЕНИЕ А. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
Данный документ описывает способы взаимодействия с созданным продуктом. Данный программный продукт имеет только одну функциональность – заполнение таблицы «Всего по кафедрам» с выявлением накладок.
Однако использовать результаты проекта можно разными способами.
Первый способ заключается в использовании кнопки «Заполнить» в таблице «Всего по кафедрам», что приведет к вызову процедур из таблиц «Расписание», «Пересдача» и «Пересдача (комиссии)», предварительно зачистив рабочие поля таблиц. Следует заметить, что в случае переименования таблиц, процедура, закрепленная за кнопкой «Всего по кафедрам» перестанет функционировать. С обратной стороны, переименование таблицы «Всего по кафедрам» приведет к неработоспособности процедур ядра разработанных модулей. Эти и некоторые другие вопросы обсуждаются в настоящем руководстве.
А.1 Запуск процедур
Для запуска процедур из файла xls, который содержится в поставке, достаточно нажать кнопку «Заполнить таблицу «Всего по кафедрам»» в любой из перечисленных таблиц: «Расписание», «Пересдача», «Пересдача (комиссии)» (рисунок А.3).
Эти кнопки заполняют таблицу «Всего по кафедрам», без предварительной очистки последней, данными из таблиц, в которой находилась кнопка, вызвавшая процедуру заполнения.
Факт того, что кнопки не очищают таблицу «Всего по кафедрам» указывает на то, что можно дважды вызвать процедуру заполнения таблицы «Всего по кафедрам», и тогда возникнет столько накладок, столько записей в таблице, в которой дважды вызвана процедура заполнения таблицы минус количество преподавателей, которые есть в графике сессий, но нету в таблице «Всего по кафедрам» (рисунок А.1, А.2). Этот прием позволяет выявить тех преподавателей, которые не указаны в таблице «Всего по кафедрам» или преподавателей, ФИО которых написано некорректно.
Рисунок А.1 – Двойной вызов процедуры заполнения выявил, что доц.Ходикіна В.В. отсутствует в таблице «Всего по кафедрам»
Рисунок А.2 – Встроенный фильтр MS Excel подтвердил результат
Рисунок А.3 – Кнопки, для заполнения таблицы «Всего по кафедрам» из текущей таблицы
Также предоставляется возможность сразу заполнить таблицу «Всего по кафедрам», с помощью кнопки «Заполнить» в таблице «Всего по кафедрам» (рисунок А.4). Сначала очищается рабочее поле таблицы «Всего по кафедрам», затем очищается цвет ячеек всех таблиц, и поочередно вызываются процедуры для таблиц «Расписание», «Пересдача» и «Пересдача (комиссии)».
Рисунок А.4 – Элементы управления таблицы «Всего по кафедрам»
Кнопка «Очистить», очищает рабочее поле таблицы «Всего по кафедрам», и очищает цвета ячеек всех таблиц.
А.2 Возможные ошибки, и их исправление
Так как данный проект представляет собой первую версию программы, существуют ситуации, которые могут привести к сбою программы, и лишить ее работоспособности. Данный раздел описывает возможные ситуации, которые приведут к сбоям, и способы их решения.
А.2.1 Переименование таблиц
Как было упомянуто выше, в случае переименования таблиц, процедура, прикрепленная к кнопке «Заполнить» перестанет функционировать.
На рисунке А.5 продемонстрирован результат нажатия кнопки «Заполнить», при переименовании таблицы «Расписание» в «Расписание1».
В текущей поставке отсутствует возможность настройки программы с помощью оконного интерфейса, следовательно, для исправления этой ошибки, следует нажать Debug, и в выделенной строке переименовать таблицу (Рисунок А.6). После этого, следует нажать квадрат, на панели вверху (стоп), что остановит выполнение кода, и закрыть редактор кода.
После приведенных операций, можно снова запустить процедуру, и убедиться, что все работает (Рисунок А.7).