Диплом

Диплом на тему Автошкола Кадиллак

Работа добавлена на сайт bukvasha.net: 2014-06-28

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 26.11.2024


Аннотация

                                           Плохов В.В. Автошкола “Кадиллак”
                                                          Челябинск: ЮУрГУ, ЭиУ; 2007, 22с.
Это приложение разработано для того, чтобы автоматизировать все основные аспекты работы с данными предприятия “Автошкола”.  Такие как: Занесение новых клиентов в базу данных, получение о клиентах информации из базы данных, быстрый расчет статистической информации об успешности обучения в автошколе различными категориями клиентов.
Использование этого приложения позволит в значительной мере сэкономить время сотрудникам, при работе с информацией, а также избежать ошибок за счет наличия средств контроля вводимой информации, которые позволят вовремя обнаружить ошибочную информацию и уведомить об этом пользователя.

Содержание

  Содержание. 3
1. Введение. 4
2. Основная часть. 6
2.1 Постановка задачи. 6
2.2 Исходные данные. 7
2.3 Описание структуры приложения. 9
2.4 Описание форм. 10
2.4.1 Главная форма. 10
2.4.2 Форма “Справка”. 12
2.4.3 Форма “Группы”. 14
2.4.4 Форма “Формирование группы”. 16
2.4.5 Форма “Клиенты”. 18
2.4.6 Форма “Добавление клиента”. 19
2.4.7 Форма “Формирование бланка оплаты”. 22
2.4.8 Форма “Допуски”. 23
2.4.9 Форма “Информация о клиенте”. 25
2.4.10 Форма “Статистика сдачи”. 25
2.4.11 Форма “Статистика инструкторов”. 27
2.5 Отчёты.. 28
2.5.1 Информация о клиенте. 28
2.5.2 Результаты учебы.. 29
2.5.3 Статистика инструкторов. 30
3. Заключение. 31
4. Литература. 31
5. Приложения. 32
5.1 Главная форма. 32
5.2 Форма “Справка”. 34
5.3 Форма “Группы”. 35
5.4 Форма “Формирование группы”. 38
5.5 Форма “Клиенты”. 41
5.6 Форма “Добавление клиента”. 42
5.7 Форма “Формирование бланка оплаты”. 47
5.8 Форма “Допуски”. 50
5.9 Форма “Информация о клиенте”. 56
5.10 Форма “Статистика сдачи”. 59
5.11 Форма “Статистика инструкторов”. 65

1.     Введение

Microsoft Excel имеет встроенный язык программирования - Visual Basic for Аpplications (VBA). Этот язык позволяет создавать приложения, выполняемые в среде Microsoft Office. Это могут быть разнообразные аналитические программы, финансовые системы, программы учета кадров, системы автоматического создания официальных писем/документов с помощью библиотеки готовых шаблонов и т.п. При этом интерфейс создаваемой программы может быть совершенно непохожим на интерфейс того приложения, в котором она написана.
VBA сочетает в себе практически неограниченные возможности с простотой изучения и использования. Теперь большинство функций можно описать, не прибегая к программированию.
Программа MS Excel, являясь лидером на рынке программ обработки электронных таблиц, определяет тенденции развития в этой области. Вплоть до версии 4.0 программа Excel представляла собой фактический стандарт с точки зрения функциональных возможностей и удобства работы.
Одним из важнейших функциональных расширений программы, предназначенным для профессионалов, является встроенная в Excel Среда программирования Visual Basic (VBA) для решения прикладных задач. Благодаря VBA фирме Microsoft удалось не только расширить возможности языка макрокоманд Excel 4.0, но и ввести новый уровень прикладного программирования, поскольку VBA позволяет создавать полноценные прикладные пакеты, которые по своим функциям выходят далеко за рамки обработки электронных таблиц.
Visual Basic for Applications представляет собой новаторское достижение в языках программирования, возможно наиболее значительное с тех пор, как состоялся выпуск первой интегрированной среды разработки. Это означает, не то что VBA — лучшее средство разработки, а лишь то, что VBA существует. Поскольку основой приложений Microsoft послужил один и тот же язык программирования, вероятно, многим придет в голову мысль воспользоваться им. Точно так же, как пользователям Windows для подготовки множества программ необходимо освоить один интерфейс, в VBA достаточно изучить одну среду программирования, чтобы составлять разнообразные приложения.
Встраивание VBA в какое-то приложение означает для него создание объектной модели, в результате VBA-программа может обращаться к объектам этого приложения и манипулировать ими.
Введение достаточно мощного языка программирования в Excel делает эту программную платформу весьма привлекательной для профессионалов, которые занимаются разработкой специализированных прикладных систем.
Разработка языка программирования VBA, встраиваемого в прикладные системы, является одним из стратегических направлений компании Microsoft. Этот язык уже интегрирован в такие программы, как Word for Windows, Power Point и ряд других. VBA позволяет создавать программные модули, меню, диалоговые окна и другие ресурсы в среде Windows. Благодаря этому языку появляется возможность значительно расширить набор функций в Excel, а также создавать функции, значения которых зависят от некоторых условий и событий.

2.     Основная часть

2.1 Постановка задачи

Используя средства Microsoft Office Excel и средство разработки программных продуктов VBA создать приложение,  автоматизирующее оперирование информацией предприятия типа “Автошкола”. А именно:
1)       Добавление новых клиентов в базу данных автошколы.
2)       Формирование группы.
3)       Расформирование группы.
4)       Внос оплаты клиентами.
5)       Редактирование необходимой информации об учебе (Экзамены/Зачеты).
6)       Просмотр полной отчетной информации о клиенте.
7)       Формирование отчетов об успешности сдачи экзаменов различными категориями клиентов.
8)       Формирование отчетов об успешности сдачи экзаменов учениками обучаемыми конкретными инструкторами (для анализа работы инструкторов).
9)       Справка по программе.

2.2 Исходные данные

Исходная таблица данных хранится на листе “Данные” (по умолчанию скрыт). На нем содержится информация о преподавателях теории.

Рисунок  SEQ Рисунок \* ARABIC 1 – “Преподаватели теории”
Также на нем содержится информация о преподавателях вождения.

Рисунок  SEQ Рисунок \* ARABIC 2 - "Преподаватели вождения"
Информация о текущей группе (эта информация записывается средствами диалога формирования группы).

Рисунок  SEQ Рисунок \* ARABIC 3 - "Текущая группа"
Информация об условиях обучения (оплате за курс обучения, необходимому количеству откатанных часов).

Рисунок  SEQ Рисунок \* ARABIC 4 - "Условия обучения"
Главная база данных  же, формируется на листе “База”, который также по умолчанию скрыт.

2.3 Описание структуры приложения
 SHAPE  \* MERGEFORMAT
Главное меню
Справка
Группа
Сформировать группу
Клиенты
Добавить клиента
Внести оплату
Допуски
Информация о клиенте
Статистика сдачи
Статистика инструкторов
Выход

2.4  Описание форм

2.4.1 Главная форма

При открытии рабочей книги проекта, автоматически запускается главная форма приложения.

Рисунок  SEQ Рисунок \* ARABIC 5 – Главная форма
В рамке “Текущая группа” – содержится информация о дате, когда было начато обучение группы. Дата, когда программа обучения будет пройдена, а также количество дней оставшихся до конца программы обучения. Если в поле “Осталось дней до конца обучения” – содержится отрицательное число – это значит, что программа обучения уже была завершена, однако группа еще не расформирована, по  каким-либо причинам.
Однако все эти данные отображаются при условии, что группа сформирована, в противном же случае в рамке будет отображено “Не установлено”.

Рисунок  SEQ Рисунок \* ARABIC 6 - Рамка "текущая группа" , при наличии текущей группы

Рисунок  SEQ Рисунок \* ARABIC 7 – Рамка "текущая группа" , при отсутствии текущей группы
Кнопка “Справка” на главной форме – открывает окно, отображающее краткую справочную информацию по использованию приложения.
Кнопка “Группа” на главной форме – открывает окно, по управлению группой, где можно формировать и расформировывать группы.
Кнопка “Клиенты” на главной форме – открывает окно Клиенты, где производятся все основные операции с клиентами, такие как добавление нового клиента, внесение оплаты клиентами, управление допусками клиента (внесение информации о сдаче экзаменов и зачетов), получение полной информации по клиенту.
Кнопка “Статистика сдачи” на главной форме – открывает окно позволяющее формировать отчеты о сдаче экзаменов различными категориями  клиентов обучаемых/обученных в автошколе.
Кнопка “Статистика инструкторов” на главной форме – ткрывает окно позволяющее формировать отчеты о сдаче экзаменов учениками, обучающимися у конкретных мастеров.
Кнопка “Выход” – сохраняет все внесенные изменения, и закрывает приложение.

 

2.4.2 Форма “Справка”

В Справке информация разбита по категориям, каждая из которых отображается в свою очередь в отдельной рамке. Справка содержит минимально необходимую информацию по работе с приложением. Клик на кнопке “Все ясно!” в справке – приводит к возвращению в главное меню программы.
 Рисунок  SEQ Рисунок \* ARABIC 8 – Справка

2.4.3 Форма “Группы”


Рисунок  SEQ Рисунок \* ARABIC 9 – окно “Группа”
Здесь в двух вкладках содержатся списки клиентов. Во вкладке “Текущая группа” – содержится список клиентов, которые в данный момент проходят обучение. А во вкладке “Очередь” – содержится список клиентов, которые записаны в автошколу, однако еще не начали обучение. Если текущая группа не сформирована, то список на вкладке “Текущая группа” будет пуст.
                         
Рисунок  SEQ Рисунок \* ARABIC 10 – Список                         Рисунок  SEQ Рисунок \* ARABIC 11 - Список "Очередь"
“Текущая группа”
Кнопка “Сформировать группу” – открывает окно формирования группы в том случае, если текущей группы не существует, в противном случае будет возвращено сообщение об ошибке.

Рисунок  SEQ Рисунок \* ARABIC 12 – Сообщение об ошибке
Кнопка “Выпустить группу”, если план обучения не завершен, выдаст ошибку о невозможности расформирования группы.

Рисунок  SEQ Рисунок \* ARABIC 13 –Ошибка “Программа обучения не пройдена”
Если программа обучения пройдена, то появится запрос на подтверждение о расформировании группы.

Рисунок  SEQ Рисунок \* ARABIC 14 - Запрос "Расформирование группы"
Ответ “Нет” вернет в окно “Группа”, ответ “Да” также вернет в окно группа, однако текущая группа будет расформирована, а всем обучающимся присвоен статус “Окончил”.
Кнопка “Закрыть” – вернет в главное меню.

2.4.4 Форма “Формирование группы”

При активации окна формирования группы, автоматически устанавливаются значения полей “Начало обучения” и “Конец обучения”. “Начало обучения” устанавливается в соответствии с текущей системной датой, а конец обучения через 90-дневный срок от текущей даты. Выпадающий список “Учитель” содержит фамилии всех преподавателей теории.

Рисунок  SEQ Рисунок \* ARABIC 15- Окно формирования группы
Для формирования группы необходимо перенести клиентов, которые будут включены в группу, из списка “Ожидающие клиенты” в список “Формируемая группа”. Перенос осуществляется посредством кнопок “==>>” и “<<==”, также стоит заметить, что при выборе значений из списка работает multiselect (множественный выбор). После завершения выбора необходимо нажать на кнопку “Сформировать”. Если список “Формируемая группа” будет пуст, то будет возвращена ошибка.

Рисунок  SEQ Рисунок \* ARABIC 16 – Ошибка “Группа пуста”
Если во введенных датах будет содержаться ошибочная информация, то будет возвращена ошибка.

Рисунок  SEQ Рисунок \* ARABIC 17 – Ошибка “Неверная дата”
Если вся введенная информация будет корректна, и список “Формируемая группа” не будет пуст, то при клике на кнопку “Сформировать” будет выдан запрос о подтверждении формирования группы.

Рисунок  SEQ Рисунок \* ARABIC 18 - Подтверждение формирования группы
При ответе “Нет” вы будете возвращены в окно формирования группы, при ответе “Да” вы попадете в окно “Группа”, и текущая группа будет сформирована. Т.е. будут установлены сроки обучения и всем членам ныне текущей группы вместо статуса “Ожидает” будет присвоен статус “Обучаемый”.
Кнопка “Закрыть” – вернет вас в окно “Группа”.

2.4.5 Форма “Клиенты”


Рисунок  SEQ Рисунок \* ARABIC 19 - Окно "Клиенты"
Кнопка “Добавить клиента” – открывает окно “Добавление клиента”, где посредством заполнения полей на форме, будет сформирована новая в базе данных о клиенте.
Кнопка “Внести оплату” – открывает окно “Формирование бланка оплата”, где можно сформировать бланк оплаты для конкретного клиента и непосредственно внести оплату за обучение.
Кнопка “Допуски” – открывает окно “Данные по учебе клиента”, где формируется вся информация, о сдаче экзаменов/зачетов клиентом.
Кнопка “Информация о клиенте” – открывает окно выбора клиента, по которому будет выведена информация.
Кнопка “Закрыть” – вернет вас в главное меню.

2.4.6 Форма “Добавление клиента”


Рисунок  SEQ Рисунок \* ARABIC 20 - Окно "Добавление клиента"
Рамка “Личные данные” – предназначена для ввода такой информации, как “Фамилия”, “Имя”, “Отчество”, “Дата рождения”.

Рисунок  SEQ Рисунок \* ARABIC 21 – Рамка “Личные данные”
Рамка “Паспортные данные” – предназначена для ввода такой информации, как “Кем выдан”, “Дата выдачи”, “Серия”, “Номер”.

Рисунок  SEQ Рисунок \* ARABIC 22 - Рамка "Паспортные данные"
Рамка “Адрес” – предназначена для ввода такой информации, как “Улица”, “Дом”, “Квартира”, “Домашний телефон”, “Сотовый телефон”. Однако номера телефонов являются опциональными полями, то есть их необязательно заполнять, они помечены звездочкой “*”.

Рисунок  SEQ Рисунок \* ARABIC 23 - Рамка "Адрес"
Рамка “Остальное” – содержит два выпадающих списка: “Автомобиль” и “Инструктор”. Сперва клиент выбирает марку автомобиля, на котором желает проходить обучения. И в зависимости от выбранной им марки формируется выпадающий список “Инструктор”, из тех мастеров, которые обучают вождению на выбранной пользователем модели автомобиля.

Рисунок  SEQ Рисунок \* ARABIC 24 – Рамка “Остальное”
Кнопка “Внести в базу данных!” – осуществляет запись клиента в базу. Если вся информация введена в необходимом объеме и без ошибок, то будет выдано сообщение об успешном внесении клиента в базу данных. После нажатия на кнопку “ОК”, вы будете возвращены в окно “Клиенты”.

Рисунок  SEQ Рисунок \* ARABIC 25 – Сообщение об успешном внесении клиента в базу данных
В том случае, если данные введены не в полном объеме или содержат ошибки, то будет выдано сообщение об ошибке.

Рисунок  SEQ Рисунок \* ARABIC 26 - Сообщение ошибочных данных

2.4.7 Форма “Формирование бланка оплаты”


Рисунок  SEQ Рисунок \* ARABIC 27 - Формирование бланка оплата
В поле “Дата оплаты” – устанавливается дата, когда произведена оплата. Выпадающий список “ФИО Плательщика” – содержит клиентов со статусами “Обучаемый” и “Ожидает”, он предназначен для выбора плательщика. Поле “Сумма платежа” – предназначено для ввода суммы, которая будет переведена на счет автошколы. Кнопка “Сформировать бланк” – переводит в вас к бланку оплаты, но только в том случае, если введенная сумма отлична от 0, и дата оплаты установлена корректно. В противном случае будет выдано сообщение об ошибке.

Рисунок  SEQ Рисунок \* ARABIC 28 - сообщение ошибочных данных
В том случае, если вы удачно перешли к бланку оплаты, то окно “Формирование бланка оплаты” будет скрыто, и вы сможете распечатать бланк посредством кнопки “Печать”, либо вернуться к окну “Формирование бланка оплаты” посредством кнопки “Вернуться”.
После того, как плательщик передаст деньги кассиру и распишется об оплате денег, то необходимо занести сведения об оплате клиентом в базу данных. Для этого с нужными выбранными значениями окна “Формирование бланка оплаты” нужно нажать на кнопку “Подтвердить оплату”. Тогда, вам будет отображено сообщение об успешном занесении оплаты в базу данных.

Рисунок  SEQ Рисунок \* ARABIC 29 – Сообщение внесения оплаты
Кнопка “Закрыть” – возвратит вас к окну “Клиенты”.
2.4.8 Форма “Допуски”

Рисунок  SEQ Рисунок \* ARABIC 30 - Окно "Допуски"
Вверху содержится выпадающий список, который включает в себя всех клиентов, которые в данный момент проходят обучение. После выбора клиента отображается информация о том сколько он оплатил, сколько откатал часов, и какие экзамены/зачеты он сдал. Для получения допуска до внутренних экзаменов, клиент должен сдать все зачеты, а именно “ПДД”, “Первая помощь”, должен пройти медицинский осмотр, оплатить полную сумму обучения, и откатать положенный минимум академических часов на автомобиле. Если все эти условия будут выполнены, то рамка “Допуск до внутренних экзаменов” станет неактивной, и активизируется рамка “Допуск до экзаменов в ГАИ”. Для того чтобы получить допуск до экзаменов в ГАИ, клиент обязан успешно сдать внутренние экзамены, а именно “ПДД”, “Автодром”, “Город”. Только после успешной сдачи этих экзаменов клиент может быть допущен до окончательного этапа “Экзамены в ГАИ”. В этом случае, рамка “Допуск до экзаменов в ГАИ” становится неактивной, а рамка “Экзамены в ГАИ” активизируется. Сюда заносится информация о результатах экзаменов в ГАИ, которые в дальнейшем влияют на статистику общего уровня сдачи/не сдачи экзаменов в ГАИ от автошколы.

Рисунок  SEQ Рисунок \* ARABIC 31 - Окно "Допуски", после некоторых изменений
Кнопка “Сохранить” – сохраняет все внесенные изменения о результатах зачетов/экзаменов.
Кнопка “Выйти” – возвращает в окно “Клиенты”.

2.4.9 Форма “Информация о клиенте”


Рисунок  SEQ Рисунок \* ARABIC 32 - Окно "Информация о клиенте"
Эта форма является простым инструментом для формирования отчета по клиенту. Левый выпадающий список содержит тип клиента (“Окончил”, “Обучаемый”, “Ожидает”), а второй список посредством анализа первого списка заполняется клиентами выбранной категории. Кнопка “ОК” переводит к отчету по выбранному клиенту.

2.4.10 Форма “Статистика сдачи”


Рисунок  SEQ Рисунок \* ARABIC 33 - Окно "Статистика сдачи"
Эта форма является основным средством по получению статистической информации, характеризующей уровень сдачи/не сдачи экзаменов клиентами.
Верхнее поле “Всего записей в базе” – содержит количественную информацию о том, сколько клиентов всех статусов (“Окончил”, “Обучаемый”, “Ожидает”), содержится в базе данных.
Рамка “Фильтры” –  содержит все формирующие отчет критерии.
Выпадающий список “Статус” – содержит значения “Любой”, “Окончил”, “Обучаемый” (включение статуса “Ожидает” нецелесообразно, так как по понятным причинам клиенты этого статуса не имеют никаких сданных экзаменов).
Поле “Год рождения” – предназначено для введения года рождения клиентов, по которым производится запрос, однако по умолчанию это поле неактивно. для того чтобы активизировать это поле, необходимо включить флажок расположенный правее него, тогда год рождения будет учтен при анализе информации фильтров, в противном случае, год рождения учтен не будет.
Выпадающий список “Автомобиль” – содержит значение “Любой”, и значения всех автомобилей имеющихся в автопарке школы. Также является средством более точного запроса отчета.

Рисунок  SEQ Рисунок \* ARABIC 34 - Окно "Статистика сдачи"  с детальным запросом
Кнопка “Быстрый отчет” – предназначена для быстрого формирования результатов и отображения их во всплывающем сообщении.

Рисунок  SEQ Рисунок \* ARABIC 35 - "Быстрый отчет"
Кнопка “Табличный отчет” – предназначена для формирования этого же отчета на отдельной таблице с возможностью ее распечатки.

2.4.11 Форма “Статистика инструкторов”


Рисунок  SEQ Рисунок \* ARABIC 36 - "Статистика инструкторов"
Эта форма предназначена для формирования отчета о качестве обучения учеников различными инструкторами, посредством анализа статистической информации о сдаче/не сдаче экзаменов их учениками.
Выпадающий список “Автомобиль” – содержит значение “Любой”, и значения всех автомобилей имеющихся в автопарке школы.
Выпадающий список “Инструктор” – формируется посредством анализа первого поля. И заполняется всеми инструкторами, которые обучают на этой модели автомобиля.
Кнопка “Отчет” – формирует табличный отчет по заданным критериям.
Кнопка “Закрыть” – возвращает в главное меню.

2.5  Отчёты

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

2.5.1 Информация о клиенте


Рисунок  SEQ Рисунок \* ARABIC 37 – Информация о клиенте
Отчёт “Информация” – отображает всю информацию о выбранном клиенте в таблице. Эта информация содержит помимо общих данных указанных при его регистрации, также и информацию касательно его обучения.
Кнопка “Печать” – открывает диалог отправления этого отчета на печать, а кнопка “Вернуться” – скрывает этот лист и возвращает на форму построения отчета.

2.5.2 Результаты учебы


Рисунок  SEQ Рисунок \* ARABIC 38 - Результаты учебы
Отчет “Результаты учебы” – отображает все данные по учебе, а именно о сдаче экзаменов, различными категориями учеников. Верхнее поле содержит критерии выбранной категории  (“Статус”, “Год рождения”, “Автомобиль”), ниже идут непосредственно сами количественные результаты сдачи  каждого из экзаменов.
В графе “Итого допущено до экзамена в ГАИ” – отображается количественная информация о том, сколько учеников сдали все внутренние экзамены автошколы.
В графе “Итого сдало экзамен в ГАИ” – отображается количественная информация о том, сколько учеников сдали все экзамены в ГАИ и получили возможность получить права.
В графе “Всего записей в базе” – отображается сколько всего запсией в базе данных, которые удовлетворяют заданному критерию.
Кнопка “Печать” – открывает диалог отправления этого отчета на печать, а кнопка “Вернуться” – скрывает этот лист и возвращает на форму построения отчета.

2.5.3 Статистика инструкторов


Рисунок  SEQ Рисунок \* ARABIC 39 - Статистика инструкторов
Отчет “Статистика инструкторов” – отображает все данные по результатам сдачи экзаменов у конкретных инструкторов.
Графа “Инструктор” – отображает имя инструктора по которому выдается информация.
Графа “Автомобиль” – отображает марку автомобиля, на которой проводит обучение инструктор.
Графа “Кол-во” записанных учеников – отображает количественную информацию об учениках, обучавшихся у данного инструктора. В расчет принимаются только те, кто уже окончил обучение.
Ниже идет подробная информация по каждому экзамену.
Самая нижняя графа – “Процент полностью сдавших экзамены в ГАИ”, отображает процентную информацию о тех, кто сдал все экзамены в гаи, и получил возможность получить права.
Кнопка “Печать” – открывает диалог отправления этого отчета на печать, а кнопка “Вернуться” – скрывает этот лист и возвращает на форму построения отчета.

 

3. Заключение

Сегодня, существует множество задач, которые возможно автоматизировать в той или иной степени. Умение автоматизировать задачи позволяет в значительной мере экономить время и избегать ошибок.
В ходе выполнения курсовой работы была подробно изучена среда разработки VBA и закреплены следующие навыки:
1)       Создание пользовательского интерфейса.
2)       Создание алгоритмов автоматизирующих процесс работы с базой данных.
3)       Занесение новых значений в базу данных.
4)       Обработка ошибочных данных.
5)       Алгоритмы создания отчетной информации.
В дальнейшем возможна доработка этого приложения, в качестве примеров можно привести  следующие доработки:
1)       Добавление новых видов отчетов.
2)       Добавление интерфейсной части по редактированию исходной базы данных (устройство на работу новых сотрудников, расширение автопарка).
3)       Добавление учета посещаемости занятий.
4)       Анализ сдачи экзаменов по сезонам.

4. Литература

1.                                         Горных Е. Н. Программирование на VBA.: Учебное пособие - Челябинск: Изд. ЮУрГУ, 2003.-76 с.
2.                                         Уокенбах Джон. Профессиональное программирование на VBA в Excel 2002.:Пер. с англ. – М.: Издательский дом «Вильямс», 2003. – 784 с.

5. Приложения

Здесь содержатся некоторые листинги кода.

5.1 Главная форма

Кнопка “Клиенты”:
Private Sub bt_client_Click()
MainForm.Hide
ClientForm.Show (0)
End Sub
Кнопка “Выход”:
Private Sub bt_exit_Click()
MainForm.Hide
Application.DisplayFormulaBar = True
Application.CommandBars("Standard").Visible = True
Application.CommandBars("Formatting").Visible = True
Workbooks("cursed2ex.xls").Save
Workbooks("cursed2ex.xls").Close
End Sub
Кнопка “Группы”:
Private Sub bt_group_Click()
MainForm.Hide
GroupForm.Show (0)
End Sub
Кнопка “Статистика сдачи”:
Private Sub bt_stat_Click()
MainForm.Hide
StatForm.Show (0)
End Sub
Кнопка “Статистика инструкторов”:
Private Sub CommandButton1_Click()
MainForm.Hide
InstrForm.Show (0)
End Sub
Кнопка “Справка”:
Private Sub CommandButton2_Click()
MainForm.Hide
MainHelpForm.Show (0)
End Sub
Активация главной формы:
Private Sub UserForm_Activate()
Dim x, y As Integer
x = 0
y = 0
Sheets("База").Activate
Cells(1, 1).Select
all = Selection.CurrentRegion.Rows.Count
For i = 2 To all
    If Sheets("База").Cells(i, 29) = "Ожидает" Then
    x = x + 1
    End If
Next i
For i = 2 To all
    If Sheets("База").Cells(i, 29) = "Обучаемый" Then
    y = y + 1
    End If
Next i
Sheets("Данные").Activate
If Sheets("Данные").Range("I2") = "" Then lb_beg.Caption = "Не установлено" Else lb_beg.Caption = Sheets("Данные").Range("I2")
If Sheets("Данные").Range("J2") = "" Then lb_end.Caption = "Не установлено" Else lb_end.Caption = Sheets("Данные").Range("J2")
If lb_beg.Caption = "Не установлено" Then lb_rest.Caption = "Не установлено"    Else lb_rest.Caption = CDate(lb_end.Caption) - Date
End Sub

5.2 Форма “Справка”

Кнопка “Все ясно!”:
Private Sub CommandButton1_Click()
MainHelpForm.Hide
MainForm.Show (0)
End Sub
Завершение работы формы:
Private Sub UserForm_Terminate()
MainForm.Show (0)
End Sub
Активация формы:
Здесь листинг опущен, так как происходит лишь установка значений текстовых полей, которые очень объемны, по своему содержанию.

5.3 Форма “Группы”

Кнопка “Закрыть”:
Private Sub bt_exitgroup_Click()
GroupForm.Hide
MainForm.Show (0)
End Sub
Кнопка “Сформировать группу”:
Private Sub bt_newgroup_Click()
Dim x, y As Integer
x = 0
y = 0
Sheets("База").Activate
Sheets("База").Cells(1, 1).Select
all = Selection.CurrentRegion.Rows.Count
For i = 2 To all
    If Sheets("База").Cells(i, 29) = "Ожидает" Then
    x = x + 1
    End If
Next i
For i = 2 To all
    If Sheets("База").Cells(i, 29) = "Обучаемый" Then
    y = y + 1
    End If
Next i
If x = 0 Or y > 0 Then
z = MsgBox("Нельзя сформировать группу! ", vbCritical + vbOKOnly, "Автошкола")
Else
GroupForm.Hide
CreateGroupForm.Show (0)
End If
End Sub
Кнопка “Выпустить группу”:
Private Sub bt_unform_Click()
If CDate(Sheets("Данные").Range("J2")) <= Date And lb_cur.ListCount > 0 Then
    x = MsgBox("Вы подтверждаете окончание обучения группы?", vbQuestion + vbYesNo, "Автошкола")
    If x = 6 Then
    Sheets("База").Activate
    Sheets("База").Cells(1, 1).Select
    all = Selection.CurrentRegion.Rows.Count
        For i = 2 To all
            If Sheets("База").Cells(i, 29) = "Обучаемый" Then Cells(i, 29) = "Окончил"
        Next i
    lb_cur.Clear
    Sheets("Данные").Activate
    Sheets("Данные").Range("H2") = ""
    Sheets("Данные").Range("I2") = ""
    Sheets("Данные").Range("J2") = ""
    End If
Else
    If lb_cur.ListCount > 0 Then
        x = MsgBox("Программа обучения еще не пройдена!", vbCritical + vbOKOnly, "Автошкола")
    Else
        x = MsgBox("Группа не набрана!", vbCritical + vbOKOnly, "Автошкола")
    End If
End If
End Sub
Активация формы:
Private Sub UserForm_Activate()
lb_cur.Clear
lb_next.Clear
Sheets("База").Activate
Sheets("База").Cells(1, 1).Select
all = Selection.CurrentRegion.Rows.Count
For i = 2 To all
    If Sheets("База").Cells(i, 29) = "Обучаемый" Then lb_cur.AddItem (Sheets("База").Cells(i, 2) & " " & Sheets("База").Cells(i, 3) & " " & Sheets("База").Cells(i, 4))
Next i
For i = 2 To all
    If Sheets("База").Cells(i, 29) = "Ожидает" Then lb_next.AddItem (Sheets("База").Cells(i, 2) & " " & Sheets("База").Cells(i, 3) & " " & Sheets("База").Cells(i, 4))
Next i
End Sub
Завершение работы формы:
Private Sub UserForm_Terminate()
MainForm.Show (0)
End Sub

5.4 Форма “Формирование группы”

Кнопка “Закрыть”:
Private Sub bt_exit_Click()
CreateGroupForm.Hide
GroupForm.Show (0)
End Sub
Кнопка “Сформировать”:
Private Sub bt_save_Click()
On Error GoTo erin:
If ed_date.Text = CDate(ed_date.Text) And ed_enddate.Text = CDate(ed_enddate.Text) And CDate(ed_enddate.Text) > CDate(ed_date.Text) And ListBox1.ListCount <> 0 Then
    answ = MsgBox("Вы действительно хотите сформировать группу в таком составе? Она будет зафиксирована до конца обучения.", vbYesNo + vbQuestion, "Автошкола")
    If (answ = 6) Then
        Sheets("База").Activate
        Sheets("База").Cells(1, 1).Select
        all = Selection.CurrentRegion.Rows.Count
        s = ListBox1.ListCount
        For i = 2 To all
            For k = 0 To s - 1
                If Sheets("База").Cells(i, 29) = "Ожидает" And (Sheets("База").Cells(i, 2) & " " & Sheets("База").Cells(i, 3) & " " & Sheets("База").Cells(i, 4)) = ListBox1.List(k) Then
                    Sheets("База").Cells(i, 29) = "Обучаемый"
                End If
            Next k
        Next i
        Sheets("Данные").Activate
        Sheets("Данные").Range("I2") = ed_date
        Sheets("Данные").Range("J2") = ed_enddate
        Sheets("Данные").Range("H2") = cb_teacher
        CreateGroupForm.Hide
        GroupForm.Show (0)
    End If
End If
If ed_date.Text <> CDate(ed_date.Text) Or ed_enddate.Text <> CDate(ed_enddate.Text) Or CDate(ed_enddate.Text) <= CDate(ed_date.Text) Or ListBox1.ListCount = 0 Then
erin:
    If ListBox1.ListCount = 0 Then
        x = MsgBox("Группа пуста!", vbCritical + vbOKOnly, "Автошкола")
    Else
        x = MsgBox("Ошибка в дате!", vbCritical + vbOKOnly, "Автошкола")
    End If
End If
End Sub
Кнопка “==>>”:
Private Sub CommandButton1_Click()
Dim i As Integer
For i = ListBox1.ListCount - 1 To 0 Step -1
If ListBox1.Selected(i) Then
ListBox2.AddItem ListBox1.List(i)
ListBox1.RemoveItem i
End If
Next i
End Sub
Кнопка “<<==”:
Private Sub CommandButton2_Click()
Dim i As Integer
For i = ListBox2.ListCount - 1 To 0 Step -1
If ListBox2.Selected(i) Then
ListBox1.AddItem ListBox2.List(i)
ListBox2.RemoveItem i
End If
Next i
End Sub
Активация формы:
Private Sub UserForm_Activate()
ed_date.Text = Date
ed_enddate.Text = Date + 90
cb_teacher.ListIndex = 0
ListBox1.Clear
ListBox2.Clear
Sheets("База").Activate
Sheets("База").Cells(1, 1).Select
all = Selection.CurrentRegion.Rows.Count
For i = 2 To all
    If Sheets("База").Cells(i, 29) = "Ожидает" Then ListBox2.AddItem (Sheets("База").Cells(i, 2) & " " & Sheets("База").Cells(i, 3) & " " & Sheets("База").Cells(i, 4))
Next i
End Sub
Завершение работы формы:
Private Sub UserForm_Terminate()
GroupForm.Show (0)
End Sub

5.5 Форма “Клиенты”

Кнопка “Закрыть”:
Private Sub bt_exitclient_Click()
ClientForm.Hide
MainForm.Show (0)
End Sub
Кнопка “Внести оплату”:
Private Sub bt_makeblank_Click()
ClientForm.Hide
PayForm.Show (0)
End Sub
Кнопка “Добавить клиента”:
Private Sub bt_newclient_Click()
ClientForm.Hide
AddClientForm.Show (0)
End Sub
Кнопка “Информация о клиенте”:
Private Sub bt_showsuc_Click()
ClientForm.Hide
SelectForm.Show (0)
End Sub
Кнопка “Допуски”:
Private Sub bt_waydata_Click()
ClientForm.Hide
WayForm.Show (0)
End Sub
Завершение работы формы:
Private Sub UserForm_Terminate()
MainForm.Show (0)
End Sub

5.6 Форма “Добавление клиента”

Кнопка “Внести в базу данных!”:
Private Sub bt_add_Click()
On Error GoTo erin:
If ed_surname.Text <> "" And ed_name.Text <> "" And ed_patron.Text <> "" And ed_birth.Text <> "" And ed_str.Text <> "" And ed_home.Text <> "" And ed_room.Text <> "" And ed_who.Text <> "" And ed_date.Text <> "" And ed_ser.Text <> "" And ed_num.Text <> "" And Val(ed_home.Text) <> 0 And Val(ed_room.Text) <> 0 And Val(ed_ser.Text) <> 0 And Val(ed_num.Text) <> 0 And Val(ed_birth.Text) <> 0 And Val(ed_date.Text) <> 0 And ed_birth.Text = CDate(ed_birth.Text) And ed_date.Text = CDate(ed_date.Text) Then
    Dim all As Integer
    Sheets("База").Activate
    Sheets("База").Cells(1, 1).Select
    Selection.CurrentRegion.Select
    all = Selection.CurrentRegion.Rows.Count
    Sheets("База").Cells(all + 1, 1) = Val(Sheets("База").Cells(all, 1)) + 1
    Sheets("База").Cells(all + 1, 2) = AddClientForm.ed_surname.Text
    Sheets("База").Cells(all + 1, 3) = AddClientForm.ed_name.Text
    Sheets("База").Cells(all + 1, 4) = AddClientForm.ed_patron.Text
    Sheets("База").Cells(all + 1, 5) = CDate(AddClientForm.ed_birth.Text)
    Sheets("База").Cells(all + 1, 6) = AddClientForm.ed_who.Text
    Sheets("База").Cells(all + 1, 7) = CDate(AddClientForm.ed_date.Text)
    Sheets("База").Cells(all + 1, 8) = AddClientForm.ed_ser.Text
    Sheets("База").Cells(all + 1, 9) = AddClientForm.ed_num.Text
    Sheets("База").Cells(all + 1, 10) = AddClientForm.ed_str.Text
    Sheets("База").Cells(all + 1, 11) = AddClientForm.ed_home.Text
    Sheets("База").Cells(all + 1, 12) = AddClientForm.ed_room.Text
    Sheets("База").Cells(all + 1, 13) = AddClientForm.ed_phone.Text
    Sheets("База").Cells(all + 1, 14) = AddClientForm.ed_mobile.Text
    Sheets("База").Cells(all + 1, 15) = "Нет"
    Sheets("База").Cells(all + 1, 16) = "Нет"
    Sheets("База").Cells(all + 1, 17) = "Нет"
    Sheets("База").Cells(all + 1, 18) = AddClientForm.cb_car.Value
    Sheets("База").Cells(all + 1, 19) = AddClientForm.cb_teacher.Value
    Sheets("База").Cells(all + 1, 20) = 0
    Sheets("База").Cells(all + 1, 21) = 0
    Sheets("База").Cells(all + 1, 23) = "Нет"
    Sheets("База").Cells(all + 1, 24) = "Нет"
    Sheets("База").Cells(all + 1, 25) = "Нет"
    Sheets("База").Cells(all + 1, 26) = "Нет"
    Sheets("База").Cells(all + 1, 27) = "Нет"
    Sheets("База").Cells(all + 1, 28) = "Нет"
    Sheets("База").Cells(all + 1, 29) = "Ожидает"
    x = MsgBox("Клиент успешно занесен в базу данных", vbInformation + vbOKOnly, "Автошкола")
    AddClientForm.Hide
    ClientForm.Show (0)
Else
erin:
    x = MsgBox("Проверьте правильность введеных значений", vbCritical + vbOKOnly, "Автошкола")
End If
End Sub
Кнопка “Закрыть”:
Private Sub bt_exit_Click()
AddClientForm.Hide
ClientForm.Show (0)
End Sub
Список “Автомобиль”:
Private Sub cb_car_Change()
Sheets("Данные").Activate
cb_teacher.Clear
For i = 2 To 10
    If Sheets("Данные").Cells(i, 4) = cb_car.Value Then cb_teacher.AddItem Sheets("Данные").Cells(i, 3)
Next i
cb_teacher.ListIndex = 0
End Sub
Поле “Дом”:
Private Sub ed_home_Change()
ed_home.Text = Val(ed_home.Text)
End Sub
Поле “Сотовый”:
Private Sub ed_mobile_Change()
ed_mobile.Text = Val(ed_mobile.Text)
End Sub
Поле “Номер”:
Private Sub ed_num_Change()
ed_num.Text = Val(ed_num.Text)
End Sub
Поле “Дом. телефон”:
Private Sub ed_phone_Change()
ed_phone.Text = Val(ed_phone.Text)
End Sub
Поле “Квартира”:
Private Sub ed_room_Change()
ed_room.Text = Val(ed_room.Text)
End Sub
Поле “Серия”:
Private Sub ed_ser_Change()
ed_ser.Text = Val(ed_ser.Text)
End Sub
Активация формы:
Private Sub UserForm_Activate()
ed_surname.Text = ""
ed_name.Text = ""
ed_patron.Text = ""
ed_birth.Text = ""
ed_who.Text = ""
ed_date.Text = ""
ed_ser.Text = ""
ed_num.Text = ""
ed_str.Text = ""
ed_home.Text = ""
ed_room.Text = ""
ed_phone.Text = ""
ed_mobile.Text = ""
End Sub
Инициализация формы:
Private Sub UserForm_Initialize()
Sheets("Данные").Activate
cb_car.ListIndex = 0
cb_teacher.Clear
cb_teacher.AddItem Cells(4, 3)
cb_teacher.ListIndex = 0
End Sub
Завершение работы формы:
Private Sub UserForm_Terminate()
AddClientForm.Hide
ClientForm.Show (0)
End Sub

5.7 Форма “Формирование бланка оплаты”

Кнопка “Закрыть”:
Private Sub bt_exit_Click()
PayForm.Hide
ClientForm.Show (0)
End Sub
Кнопка “Сформировать бланк”:
Private Sub bt_makeblank_Click()
If (ed_datepay.Text = CDate(ed_datepay.Text)) And cb_whopay.Text <> "" And ed_money.Value <> "" And ed_money.Value <> 0 Then
Sheets("Оплата").Activate
Sheets("Оплата").Range("B5").Value = cb_whopay.Value
Sheets("Оплата").Range("C8").Value = ed_datepay.Text
Sheets("Оплата").Range("C9").Value = ed_money.Text & " руб."
PayForm.Hide
Sheets("Оплата").Visible = True
Else
    x = MsgBox("Проверьте правильность введеных значений", vbCritical + vbOKOnly, "Автошкола")
End If
End Sub
Кнопка “Подтвердить оплату”:
Private Sub bt_pay_Click()
If (ed_datepay.Text = CDate(ed_datepay.Text)) And cb_whopay.Text <> "" And ed_money.Value <> "" And ed_money.Value <> 0 Then
Sheets("База").Activate
Sheets("База").Cells(1, 1).Select
all = Selection.CurrentRegion.Rows.Count
For i = 2 To all
    If Sheets("База").Cells(i, 29) <> "Окончил" And (Sheets("База").Cells(i, 2) & " " & Sheets("База").Cells(i, 3) & " " & Sheets("База").Cells(i, 4)) = cb_whopay.Text Then Cells(i, 21) = Val(Cells(i, 21)) + ed_money.Value
Next i
    y = MsgBox("Оплата внесена!", vbInformation + vbOKOnly, "Автошкола")
Else
    x = MsgBox("Проверьте правильность введеных значений", vbCritical + vbOKOnly, "Автошкола")
End If
End Sub
Поле “Сумма платежа (руб.)”:
Private Sub ed_money_Change()
ed_money.Value = Val(ed_money.Value)
End Sub
Активация формы:
Private Sub UserForm_Activate()
cb_whopay.Clear
ed_money.Value = ""
Dim x As Integer
x = 0
ed_datepay.Text = Date
Sheets("База").Activate
Sheets("База").Cells(1, 1).Select
all = Selection.CurrentRegion.Rows.Count
For i = 2 To all
    If Sheets("База").Cells(i, 29) <> "Окончил" Then
    cb_whopay.AddItem (Sheets("База").Cells(i, 2) & " " & Sheets("База").Cells(i, 3) & " " & Sheets("База").Cells(i, 4))
    x = x + 1
    End If
Next i
If x = 0 Then
    y = MsgBox("Текущая группа пуста!", vbCritical + vbOKOnly, "Автошкола")
    PayForm.Hide
    ClientForm.Show (0)
Else
    cb_whopay.ListIndex = 0
End If
End Sub
Завершение работы формы:
Private Sub UserForm_Terminate()
PayForm.Hide
ClientForm.Show (0)
End Sub

5.8 Форма “Допуски”

Процедура (обновление активности):
Sub endis()
level_1.Enabled = True
level_2.Enabled = True
level_3.Enabled = True
If cb_able.Value = True And cb_pdd.Value = True And cb_help.Value = True And Val(desc_howmuchdrive.Text) >= Sheets("Данные").Range("L4") And Val(desc_howmuchpay.Caption) >= Sheets("Данные").Range("L2") Then
            level_1.Enabled = False
            If cb_insidepdd.Value = True And cb_insidedrive.Value = True And cb_insidegorod.Value = True Then
                level_2.Enabled = False
            Else
                level_3.Enabled = False
            End If
        Else
            level_2.Enabled = False
            level_3.Enabled = False
        End If
End Sub
Кнопка “Выйти”:
Private Sub bt_exit_Click()
WayForm.Hide
ClientForm.Show (0)
End Sub
Кнопка “Сохранить”:
Private Sub bt_save_Click()
Sheets("База").Activate
Sheets("База").Cells(1, 1).Select
all = Selection.CurrentRegion.Rows.Count
For i = 2 To all
    If ComboBox1.Text = (Sheets("База").Cells(i, 2) & " " & Sheets("База").Cells(i, 3) & " " & Sheets("База").Cells(i, 4)) And Sheets("База").Cells(i, 29) = "Обучаемый" Then
        If cb_able.Value = True Then Sheets("База").Cells(i, 17) = "Да" Else Sheets("База").Cells(i, 17) = "Нет"
        If cb_pdd.Value = True Then Sheets("База").Cells(i, 15) = "Да" Else Sheets("База").Cells(i, 15) = "Нет"
        If cb_help.Value = True Then Sheets("База").Cells(i, 16) = "Да" Else Sheets("База").Cells(i, 16) = "Нет"
        If cb_insidepdd.Value = True Then Sheets("База").Cells(i, 23) = "Да" Else Sheets("База").Cells(i, 23) = "Нет"
        If cb_insidedrive.Value = True Then Sheets("База").Cells(i, 24) = "Да" Else Sheets("База").Cells(i, 24) = "Нет"
        If cb_insidegorod.Value = True Then Sheets("База").Cells(i, 25) = "Да" Else Sheets("База").Cells(i, 25) = "Нет"
        If cb_gaipdd.Value = True Then Sheets("База").Cells(i, 26) = "Да" Else Sheets("База").Cells(i, 26) = "Нет"
        If cb_gaidrive.Value = True Then Sheets("База").Cells(i, 27) = "Да" Else Sheets("База").Cells(i, 27) = "Нет"
        If cb_gaigorod.Value = True Then Sheets("База").Cells(i, 28) = "Да" Else Sheets("База").Cells(i, 28) = "Нет"
        Sheets("База").Cells(i, 20) = desc_howmuchdrive.Text
    End If
Next i
End Sub
Элементы типа Checkbox:
Private Sub cb_able_Click()
Call endis
End Sub
Private Sub cb_help_Click()
Call endis
End Sub
Private Sub cb_insidedrive_Click()
Call endis
End Sub
Private Sub cb_insidegorod_Click()
Call endis
End Sub
Private Sub cb_insidepdd_Click()
Call endis
End Sub
Private Sub cb_pdd_Click()
Call endis
End Sub
Список “Клиент”:
Private Sub ComboBox1_Change()
Sheets("База").Activate
Sheets("База").Cells(1, 1).Select
all = Selection.CurrentRegion.Rows.Count
For i = 2 To all
    If ComboBox1.Text = (Sheets("База").Cells(i, 2) & " " & Sheets("База").Cells(i, 3) & " " & Sheets("База").Cells(i, 4)) And Sheets("База").Cells(i, 29) = "Обучаемый" Then
        cb_able.Value = False
        cb_pdd.Value = False
        cb_help.Value = False
        cb_insidepdd.Value = False
        cb_insidedrive.Value = False
        cb_insidegorod.Value = False
        cb_gaipdd.Value = False
        cb_gaidrive.Value = False
        cb_gaigorod.Value = False
        level_1.Enabled = True
        level_2.Enabled = True
        level_3.Enabled = True
        If Sheets("База").Cells(i, 17) = "Да" Then cb_able.Value = True
        If Sheets("База").Cells(i, 15) = "Да" Then cb_pdd.Value = True
        If Sheets("База").Cells(i, 16) = "Да" Then cb_help.Value = True
        If Sheets("База").Cells(i, 23) = "Да" Then cb_insidepdd.Value = True
        If Sheets("База").Cells(i, 24) = "Да" Then cb_insidedrive.Value = True
        If Sheets("База").Cells(i, 25) = "Да" Then cb_insidegorod.Value = True
        If Sheets("База").Cells(i, 26) = "Да" Then cb_gaipdd.Value = True
        If Sheets("База").Cells(i, 27) = "Да" Then cb_gaidrive.Value = True
        If Sheets("База").Cells(i, 28) = "Да" Then cb_gaigorod.Value = True
        desc_howmuchdrive.Text = Val(Cells(i, 20))
        desc_howmuchpay.Caption = Val(Cells(i, 21))
        Sheets("Данные").Activate
        Call endis
    End If
Next i
End Sub
Поле “Откатано часов”:
Private Sub desc_howmuchdrive_Change()
desc_howmuchdrive.Text = Val(desc_howmuchdrive.Text)
Call endis
End Sub
Активация формы:
Private Sub UserForm_Activate()
Dim first, hod As Integer
hod = 0
first = 0
ComboBox1.Clear
cb_able.Value = False
cb_pdd.Value = False
cb_help.Value = False
cb_insidepdd.Value = False
cb_insidedrive.Value = False
cb_insidegorod.Value = False
cb_gaipdd.Value = False
cb_gaidrive.Value = False
cb_gaigorod.Value = False
level_1.Enabled = True
level_2.Enabled = True
level_3.Enabled = True
Sheets("База").Activate
Sheets("База").Cells(1, 1).Select
all = Selection.CurrentRegion.Rows.Count
For i = 2 To all
    If Sheets("База").Cells(i, 29) = "Обучаемый" Then
    hod = hod + 1
    If hod = 1 Then first = i
    ComboBox1.AddItem (Sheets("База").Cells(i, 2) & " " & Sheets("База").Cells(i, 3) & " " & Sheets("База").Cells(i, 4))
    End If
Next i
If first <> 0 Then
    i = first
    If Sheets("База").Cells(i, 17) = "Да" Then cb_able.Value = True
    If Sheets("База").Cells(i, 15) = "Да" Then cb_pdd.Value = True
    If Sheets("База").Cells(i, 16) = "Да" Then cb_help.Value = True
    If Sheets("База").Cells(i, 23) = "Да" Then cb_insidepdd.Value = True
    If Sheets("База").Cells(i, 24) = "Да" Then cb_insidedrive.Value = True
    If Sheets("База").Cells(i, 25) = "Да" Then cb_insidegorod.Value = True
    If Sheets("База").Cells(i, 26) = "Да" Then cb_gaipdd.Value = True
    If Sheets("База").Cells(i, 27) = "Да" Then cb_gaidrive.Value = True
    If Sheets("База").Cells(i, 28) = "Да" Then cb_gaigorod.Value = True
    desc_howmuchdrive.Text = Val(Sheets("База").Cells(i, 20))
    desc_howmuchpay.Caption = Val(Sheets("База").Cells(i, 21))
    Sheets("Данные").Activate
    Call endis
    ComboBox1.ListIndex = 0
Else
    y = MsgBox("Текущая группа пуста!", vbCritical + vbOKOnly, "Автошкола")
    WayForm.Hide
    ClientForm.Show (0)
End If
End Sub
Завершение работы формы:
Private Sub UserForm_Terminate()
ClientForm.Show (0)
End Sub

5.9 Форма “Информация о клиенте”

Кнопка “ОК”:
Private Sub bt_ok_Click()
If ComboBox1.Text <> "" Then
Sheets("База").Activate
Sheets("База").Cells(1, 1).Select
all = Selection.CurrentRegion.Rows.Count
For i = 2 To all
    If ComboBox1.Text = (Sheets("База").Cells(i, 2) & " " & Sheets("База").Cells(i, 3) & " " & Sheets("База").Cells(i, 4)) Then
        Sheets("Клиент-Отчет").Range("B3") = ComboBox1.Text
        Sheets("Клиент-Отчет").Range("B4") = Sheets("База").Cells(i, 5)
        Sheets("Клиент-Отчет").Range("B5") = "№ " & Sheets("База").Cells(i, 8) & " " & Sheets("База").Cells(i, 9) & " выдан " & Sheets("База").Cells(i, 6) & ", " & Sheets("База").Cells(i, 7)
        Sheets("Клиент-Отчет").Range("B6") = "ул. " & Sheets("База").Cells(i, 10) & ", " & "дом " & Sheets("База").Cells(i, 11) & ", кв. " & Sheets("База").Cells(i, 12)
        If Sheets("База").Cells(i, 13) <> "" And Sheets("База").Cells(i, 14) <> "" Then
            Sheets("Клиент-Отчет").Range("B7") = Sheets("База").Cells(i, 13) & " ; " & Sheets("База").Cells(i, 14)
        Else
            Sheets("Клиент-Отчет").Range("B7") = Sheets("База").Cells(i, 13) & Sheets("База").Cells(i, 14)
        End If
        Sheets("Клиент-Отчет").Range("D3") = Sheets("База").Cells(i, 19)
        Sheets("Клиент-Отчет").Range("D4") = Sheets("Данные").Range("H2")
        Sheets("Клиент-Отчет").Range("D5") = Sheets("База").Cells(i, 18)
        Sheets("Клиент-Отчет").Range("D6") = Sheets("База").Cells(i, 21)
        Sheets("Клиент-Отчет").Range("D7") = Sheets("База").Cells(i, 20)
       
        Sheets("Клиент-Отчет").Range("B9") = Sheets("База").Cells(i, 17)
        Sheets("Клиент-Отчет").Range("B10") = Sheets("База").Cells(i, 15)
        Sheets("Клиент-Отчет").Range("B11") = Sheets("База").Cells(i, 16)
        Sheets("Клиент-Отчет").Range("D9") = Sheets("База").Cells(i, 23)
        Sheets("Клиент-Отчет").Range("D10") = Sheets("База").Cells(i, 24)
        Sheets("Клиент-Отчет").Range("D11") = Sheets("База").Cells(i, 25)
       
        Sheets("Клиент-Отчет").Range("A14") = Sheets("База").Cells(i, 26)
        Sheets("Клиент-Отчет").Range("C14") = Sheets("База").Cells(i, 27)
        Sheets("Клиент-Отчет").Range("D14") = Sheets("База").Cells(i, 28)
    End If
Next i
SelectForm.Hide
Sheets("Клиент-Отчет").Activate
Sheets("Клиент-Отчет").Visible = True
Else
x = MsgBox("Нет клиентов в этой категории!", vbCritical + vbOKOnly, "Автошкола")
End If
End Sub
Список “Статус”:
Private Sub ComboBox2_Change()
Dim hod As Integer
hod = 0
ComboBox1.Clear
Sheets("База").Activate
Sheets("База").Cells(1, 1).Select
all = Selection.CurrentRegion.Rows.Count
status = ComboBox2.Text
For i = 2 To all
    If Sheets("База").Cells(i, 29) = status Then
    hod = hod + 1
    If hod = 1 Then first = i
    ComboBox1.AddItem (Sheets("База").Cells(i, 2) & " " & Sheets("База").Cells(i, 3) & " " & Sheets("База").Cells(i, 4))
    End If
Next i
If hod <> 0 Then ComboBox1.ListIndex = 0
End Sub
Активизация формы:
Private Sub UserForm_Activate()
ComboBox1.Clear
ComboBox2.Clear
ComboBox2.AddItem ("Ожидает")
ComboBox2.AddItem ("Обучаемый")
ComboBox2.AddItem ("Окончил")
ComboBox2.ListIndex = 0
End Sub
Завершение работы формы:
Private Sub UserForm_Terminate()
ClientForm.Show (0)
End Sub

5.10 Форма “Статистика сдачи”

Кнопка “Быстрый отчет”:
Private Sub bt_filter_Click()
Dim ins1, ins2, ins3, gai1, gai2, gai3, fins, fgai As Integer
ins1 = 0
ins2 = 0
ins3 = 0
gai1 = 0
gai2 = 0
gai3 = 0
Sheets("База").Activate
Sheets("База").Cells(1, 1).Select
Selection.CurrentRegion.Select
all = Selection.CurrentRegion.Rows.Count
Sheets("База").Activate
Sheets("База").Cells(1, 36).Select
Selection.CurrentRegion.Select
Selection.Clear
Sheets("База").Cells(2, 31) = ""
Sheets("База").Cells(2, 32) = ""
Sheets("База").Cells(2, 33) = ""
Sheets("База").Cells(2, 34) = ""
If cb_stat.Text = "Любой" Then Sheets("База").Cells(2, 31) = "" Else Sheets("База").Cells(2, 31) = cb_stat.Text
If CheckBox1 = True Then
    Sheets("База").Cells(2, 32) = ">=" & CDate("1.1." & ed_year.Text)
    Sheets("База").Cells(2, 33) = "<" & CDate("1.1." & Val(ed_year.Text) + 1)
End If
If cb_car.Text = "Любой" Then Sheets("База").Cells(2, 34) = "" Else Sheets("База").Cells(2, 34) = cb_car.Text
Sheets("База").Range(Cells(1, 1), Cells(all, 29)).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("База").Range( _
        "AE1:AH2"), CopyToRange:=Sheets("База").Range("AJ1"), Unique:=False
If CheckBox1.Value = True Then y = ed_year.Text Else y = "Любой"
Sheets("База").Cells(1, 36).Select
all = Selection.CurrentRegion.Rows.Count
For i = 2 To all
    If Sheets("База").Cells(i, 58) = "Да" Then ins1 = ins1 + 1
    If Sheets("База").Cells(i, 59) = "Да" Then ins2 = ins2 + 1
    If Sheets("База").Cells(i, 60) = "Да" Then ins3 = ins3 + 1
    If Sheets("База").Cells(i, 58) = "Да" And Sheets("База").Cells(i, 59) = "Да" And Sheets("База").Cells(i, 60) = "Да" Then fins = fins + 1
    If Sheets("База").Cells(i, 61) = "Да" Then gai1 = gai1 + 1
    If Sheets("База").Cells(i, 62) = "Да" Then gai2 = gai2 + 1
    If Sheets("База").Cells(i, 63) = "Да" Then gai3 = gai3 + 1
    If Sheets("База").Cells(i, 61) = "Да" And Sheets("База").Cells(i, 62) = "Да" And Sheets("База").Cells(i, 63) = "Да" Then fgai = fgai + 1
Next i
x = MsgBox("По вашему запросу:" & vbNewLine & "Статус -" & cb_stat.Text & ", Год рождения: " & y & ", Автомобиль: " & cb_car.Text & vbNewLine & vbNewLine & "Всего записей: " & all - 1 & vbNewLine & vbNewLine & "Сдавших внутренний экзамен - ПДД: " & ins1 & vbNewLine & "Сдавших внутренний экзамен - Автодром: " & ins2 & vbNewLine & "Сдавших внутренний экзамен - Город: " & ins3 & vbNewLine & "Итого допущеных до экзамена в ГАИ: " & fins & vbNewLine & "Сдавших экзамен в ГАИ - ПДД: " & gai1 & vbNewLine & "Сдавших экзамен в ГАИ - Автодром: " & gai2 & vbNewLine & "Сдавших экзамен в ГАИ - Город: " & gai3 & vbNewLine & "Итого получивших права: " & fgai, vbInformation + vbOKOnly, "Автошкола")
End Sub
Кнопка “Табличный отчет”:
Private Sub bt_tab_Click()
Sheets("Отчет").Visible = True
Dim ins1, ins2, ins3, gai1, gai2, gai3, fins, fgai As Integer
ins1 = 0
ins2 = 0
ins3 = 0
gai1 = 0
gai2 = 0
gai3 = 0
Sheets("База").Activate
Sheets("База").Cells(1, 1).Select
Selection.CurrentRegion.Select
all = Selection.CurrentRegion.Rows.Count
Sheets("База").Activate
Sheets("База").Cells(1, 36).Select
Selection.CurrentRegion.Select
Selection.Clear
Sheets("База").Cells(2, 31) = ""
Sheets("База").Cells(2, 32) = ""
Sheets("База").Cells(2, 33) = ""
Sheets("База").Cells(2, 34) = ""
If cb_stat.Text = "Любой" Then Sheets("База").Cells(2, 31) = "" Else Sheets("База").Cells(2, 31) = cb_stat.Text
If CheckBox1 = True Then
    Sheets("База").Cells(2, 32) = ">=" & CDate("1.1." & ed_year.Text)
    Sheets("База").Cells(2, 33) = "<" & CDate("1.1." & Val(ed_year.Text) + 1)
End If
If cb_car.Text = "Любой" Then Sheets("База").Cells(2, 34) = "" Else Sheets("База").Cells(2, 34) = cb_car.Text
Sheets("База").Range(Cells(1, 1), Cells(all, 29)).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("База").Range( _
        "AE1:AH2"), CopyToRange:=Sheets("База").Range("AJ1"), Unique:=False
If CheckBox1.Value = True Then y = ed_year.Text Else y = "Любой"
Sheets("База").Cells(1, 36).Select
all = Selection.CurrentRegion.Rows.Count
For i = 2 To all
    If Sheets("База").Cells(i, 58) = "Да" Then ins1 = ins1 + 1
    If Sheets("База").Cells(i, 59) = "Да" Then ins2 = ins2 + 1
    If Sheets("База").Cells(i, 60) = "Да" Then ins3 = ins3 + 1
    If Sheets("База").Cells(i, 58) = "Да" And Sheets("База").Cells(i, 59) = "Да" And Sheets("База").Cells(i, 60) = "Да" Then fins = fins + 1
    If Sheets("База").Cells(i, 61) = "Да" Then gai1 = gai1 + 1
    If Sheets("База").Cells(i, 62) = "Да" Then gai2 = gai2 + 1
    If Sheets("База").Cells(i, 63) = "Да" Then gai3 = gai3 + 1
    If Sheets("База").Cells(i, 61) = "Да" And Sheets("База").Cells(i, 62) = "Да" And Sheets("База").Cells(i, 63) = "Да" Then fgai = fgai + 1
Next i
Sheets("Отчет").Activate
Sheets("Отчет").Range("A3") = cb_stat.Text
If ed_year.Text = "" Then Sheets("Отчет").Range("B3") = "Любой" Else Sheets("Отчет").Range("B3") = ed_year.Text
Sheets("Отчет").Range("C3") = cb_car.Text
Sheets("Отчет").Range("B4") = ins1
Sheets("Отчет").Range("B5") = ins2
Sheets("Отчет").Range("B6") = ins3
Sheets("Отчет").Range("D4") = gai1
Sheets("Отчет").Range("D5") = gai2
Sheets("Отчет").Range("D6") = gai3
Sheets("Отчет").Range("D8") = fins
Sheets("Отчет").Range("D10") = fgai
Sheets("Отчет").Range("B11") = all - 1
StatForm.Hide
End Sub
Флажок “Активация года рождения”:
Private Sub CheckBox1_Click()
If CheckBox1 = True Then
    ed_year.Enabled = True
    ed_year.Text = 1990
Else
    ed_year.Enabled = False
    ed_year.Text = ""
End If
End Sub
Поле “Год рождения”:
Private Sub ed_year_Change()
If CheckBox1 = True Then ed_year.Text = Val(ed_year.Text)
End Sub
Активация формы:
Private Sub UserForm_Activate()
cb_stat.Clear
cb_car.Clear
Sheets("База").Activate
Sheets("База").Cells(1, 1).Select
all = Selection.CurrentRegion.Rows.Count
descnumcount.Caption = all - 1
cb_stat.AddItem ("Любой")
cb_stat.AddItem ("Обучаемый")
cb_stat.AddItem ("Окончил")
cb_stat.ListIndex = 0
Sheets("Данные").Activate
Sheets("Данные").Cells(1, 14).Select
alld = Selection.CurrentRegion.Rows.Count
cb_car.AddItem ("Любой")
For i = 2 To alld
    cb_car.AddItem (Sheets("Данные").Cells(i, 14))
Next i
cb_car.ListIndex = 0
ed_year.Enabled = False
End Sub
Завершение работы формы:
Private Sub UserForm_Terminate()
StatForm.Hide
MainForm.Show (0)
End Sub

5.11 Форма “Статистика инструкторов”

Список “Автомобиль”:
Private Sub cb_car_Change()
Sheets("Данные").Activate
cb_teacher.Clear
For i = 2 To 10
    If Sheets("Данные").Cells(i, 4) = cb_car.Value Then cb_teacher.AddItem Sheets("Данные").Cells(i, 3)
Next i
If cb_car.Value = "Любой" Then cb_teacher.AddItem "Любой"
cb_teacher.ListIndex = 0
End Sub
Кнопка “Закрыть”:
Private Sub CommandButton1_Click()
InstrForm.Hide
MainForm.Show (0)
End Sub
Кнопка “Отчет”:
Private Sub CommandButton2_Click()
Dim ins1, ins2, gai1, gai2, fins, fgai As Integer
ins1 = 0
ins2 = 0
gai1 = 0
gai2 = 0
fins = 0
fgai = 0
Sheets("База").Activate
Sheets("База").Cells(1, 1).Select
Selection.CurrentRegion.Select
all = Selection.CurrentRegion.Rows.Count
Sheets("База").Activate
Sheets("База").Range("BN2") = ""
Sheets("База").Range("BO2") = ""
Sheets("База").Cells(1, 70).Select
Selection.CurrentRegion.Select
Selection.Clear
If cb_car.Text <> "Любой" Then Sheets("База").Range("BN2") = cb_car.Text
If cb_teacher.Text <> "Любой" Then Sheets("База").Range("BO2") = cb_teacher.Text
Sheets("База").Range(Cells(1, 1), Cells(all, 29)).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("База").Range( _
        "BN1:BP2"), CopyToRange:=Sheets("База").Range("BR1"), Unique:=False
Sheets("База").Cells(1, 70).Select
all = Selection.CurrentRegion.Rows.Count
For i = 2 To all
    If Sheets("База").Cells(i, 93) = "Да" Then ins1 = ins1 + 1
    If Sheets("База").Cells(i, 94) = "Да" Then ins2 = ins2 + 1
    If Sheets("База").Cells(i, 92) = "Да" And Sheets("База").Cells(i, 93) = "Да" And Sheets("База").Cells(i, 94) = "Да" Then fins = fins + 1
    If Sheets("База").Cells(i, 96) = "Да" Then gai1 = gai1 + 1
    If Sheets("База").Cells(i, 97) = "Да" Then gai2 = gai2 + 1
    If Sheets("База").Cells(i, 95) = "Да" And Sheets("База").Cells(i, 96) = "Да" And Sheets("База").Cells(i, 97) = "Да" Then fgai = fgai + 1
Next i
Sheets("Отчет_Инструктор").Activate
Sheets("Отчет_Инструктор").Range("B1") = cb_teacher.Text
Sheets("Отчет_Инструктор").Range("B2") = cb_car.Text
Sheets("Отчет_Инструктор").Range("B3") = all - 1
Sheets("Отчет_Инструктор").Range("B4") = ins1
Sheets("Отчет_Инструктор").Range("B5") = ins2
Sheets("Отчет_Инструктор").Range("B6") = fins
Sheets("Отчет_Инструктор").Range("B7") = gai1
Sheets("Отчет_Инструктор").Range("B8") = gai2
Sheets("Отчет_Инструктор").Range("B9") = fgai
Sheets("Отчет_Инструктор").Range("B11") = ((100 / (all - 1)) * fgai) / 100
InstrForm.Hide
Sheets("Отчет_Инструктор").Visible = True
End Sub
Активация формы:
Private Sub UserForm_Activate()
Sheets("Данные").Activate
cb_car.Clear
cb_car.AddItem ("Любой")
cb_car.AddItem ("ВАЗ-2105")
cb_car.AddItem ("ВАЗ-2106")
cb_car.AddItem ("ВАЗ-2108")
cb_car.AddItem ("ВАЗ-2109")
cb_car.AddItem ("ВАЗ-2110")
cb_car.ListIndex = 0
End Sub
Завершение работы формы:
Private Sub UserForm_Terminate()
MainForm.Show (0)
End Sub

1. Биография на тему Томас Мор
2. Реферат Экосистема
3. Статья на тему Служение правде
4. Реферат Судебное делопроизводство
5. Реферат Домашние кошки
6. Реферат Финансовый контроль за исполнением бюджетов
7. Реферат Цапли
8. Реферат Орёл город первого салюта История праздника
9. Реферат Материальная структура Вселенной и элементарных частиц
10. Реферат на тему Lifting Up An African Hero Essay Research