Методичка по курсовой работе
.pdfReadRec (n) ‘Процедура «Читать n-ую запись» из ячеек таблицы и писать в поля формы1
End Sub
6.10. В отклике кнопки «Добавить запись» содержится обращение к процедуре WriteRec – писать запись из полей формы1 в ячейки таблицы. Для написания кода этой процедуры перейдите в модуль, где содержится код процедуры ReadRec, и далее наберите код процедуры WriteRec.
Public Sub WriteRec(rec)’ rec – номер записи, передаваемой в проце-
дуру
If rec > 0 Then ‘ номер записи должен быть положительным
With UserForm1 ‘Объявление структурной скобки для объекта фор-
ма1
‘В нижележащих строках данные из полей формы1 присваиваются ячейкам столбцов с 1 по 8 и строк, соответствующих значению rec+5, рабочего листа Решение таблицы. rec – номер переданной записи, к ней прибавляется число 5, потому, что данные в таблице расположены с 6 строки. Если rec=1, то rec+5=6. В ячейках 9 столбца производится вычисление суммарной производительности самосвалов.
Cells(rec + 5, 1).Value = .TextBox8.Value ‘
Cells(rec + 5, 2).Value = .TextBox1.Value
Cells(rec + 5, 3).Value = .TextBox2.Value
Cells(rec + 5, 4).Value = .TextBox3.Value
Cells(rec + 5, 5).Value = .TextBox4.Value
Cells(rec + 5, 6).Value = .TextBox5.Value
Cells(rec + 5, 7).Value = .TextBox6.Value
Cells(rec + 5, 8).Value = .TextBox7.Value
‘ Формула в следующей строке записана в адресации R1C1
Cells(rec + 5, 9).FormulaR1C1 = "=SUM(RC[-6]:RC[-1])" ‘ End With ‘‘ Закрытие структурной скобки
End If ‘ Конец оператора if End Sub ‘Конец процедуры
Формулу в адресации R1C1 можно получить, переключив вид адресации командой СЕРВИС – Параметры – вкладка Общие – Стиль ссылок R1C1. Поставьте курсор в ячейку с формулой, в строке формул отобразится её написание в формате R1C1. Формулу можно скопировать из строки формул и вставить в код программы.
6.11 Программирование отклика кнопки «Удалить запись». Откройте форму1, затем 2 раза щелкните по кнопке «Удалить запись» и напишите процедуру
Private Sub CommandButton2_Click() DelRec (n)’Процедура удаление записи
30
ReadRec (n)’
End Sub
6.12. Написание кода процедуры DelRec. Перейдите в модуль, где содержатся коды процедур ReadRec и WriteRec, и далее наберите код процедуры DelRec.
Public Sub DelRec(rec)
‘Процедура выполняет действия перезаписи ячеек 2 – 9 столбцов таблицы i+1 строки на i строку.
i = rec+5
While Worksheets(1).Cells(i , 1).Value <> "" ‘ Цикл выполняется до тех пор, пока в ячейках 1 столбца не будет пусто.
Cells(i , 2).Value = Cells(i + 1, 2).Value
Cells(i, 3).Value = Cells(i + 1, 3).Value
Cells(i, 4).Value = Cells(i + 1, 4).Value
Cells(i, 5).Value = Cells(i + 1, 5).Value
Cells(i, 6).Value = Cells(i + 1, 6).Value
Cells(i, 7).Value = Cells(i + 1, 7).Value
Cells(i, 8).Value = Cells(i +1, 8).Value
Cells(i, 9).FormulaR1C1 = Cells(6, 9).FormulaR1C1 i = i + 1
Wend End Sub
6.13Программирование отклика кнопки «Посмотреть Итоги». Откройте форму1, 2 раза щелкните по кнопке «Посмотреть Итоги» и напишите процедуру
Private Sub CommandButton4_Click() UserForm1.Hide ‘Скрыть форму1 UserForm2.Show’ Показать форму2 End Sub
6.14Программирование процедур откликов кнопок формы2. Проект формы2 (см. рисунок 6).
Для кнопки «ПОКАЗАТЬ» необходимо из 21 строки таблицы вывести в надписи значения ячеек в формате с двумя знаками после запятой.
Private Sub CommandButton1_Click()
‘ FormatNumber – функция форматирования чисел из ячеек 21 строки и соответствующих столбцов с 3 по 8. После форматирования числа будут с двумя знаками после запятой.
Label1.Caption = FormatNumber(Cells(21, 3), 2) Label2.Caption = FormatNumber(Cells(21, 4), 2) Label3.Caption = FormatNumber(Cells(21, 5), 2)
31
|
|
|
|
|
|
|
|
Label4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Label1 |
|
|
|
|
|
|
|
|
|
|
|
|
Label5 |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Label2 |
|
|
|
|
|
|
|
|
|
|
|
|
Label6 |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Label3 |
|
|
|
|
Label28 |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
CommandButton3 |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
Label30 |
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CommandButton1 |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
CommandButton2 |
|||
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
Рисунок 6. Проект формы2
Label4.Caption = FormatNumber(Cells(21, 6), 2) Label5.Caption = FormatNumber(Cells(21, 7), 2) Label6.Caption = FormatNumber(Cells(21, 8), 2)
Label28.Caption = FormatNumber(Cells(23, 9), 2)
‘ Из ячейки (25,9) число передается в целом формате.
Label30.Caption = FormatNumber(Cells(25, 9), 0) End Sub
Программирование кнопки «ГРАФИК»
Private Sub CommandButton3_Click()
График ‘Вызов на выполнение макроса График
End Sub
Макрос «ГРАФИК» получен действиями п.5. Sub График()
'График Макрос
'Макрос записан 21.11.2010 (timuhina) Range("A15:H15,A21:H21").Select Charts.Add
ActiveChart.ApplyCustomType ChartType:=xlBuiltIn, TypeName:= _ "График|гистограмма 2"
ActiveChart.SetSourceData
Source:=Sheets("Решение").Range("A15:H15,A21:H21") _
32
, PlotBy:=xlRows
ActiveChart.SeriesCollection(1).Values = "=Решение!R15C3:R15C8" ActiveChart.SeriesCollection(2).Values = "=Решение!R21C3:R21C8" ActiveChart.Location Where:=xlLocationAsNewSheet
With ActiveChart
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "№ само-
свала"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = _ "Количество самосвалов"
.Axes(xlCategory, xlSecondary).HasTitle = False
.Axes(xlValue, xlSecondary).HasTitle = True
.Axes(xlValue, xlSecondary).AxisTitle.Characters.Text = _
"Производительность самосвалов, тыс.т"
End With
With ActiveChart.Axes(xlCategory)
.HasMajorGridlines = True
.HasMinorGridlines = False End With
With ActiveChart.Axes(xlValue)
.HasMajorGridlines = True
.HasMinorGridlines = False End With ActiveChart.HasLegend = True ActiveChart.Legend.Select Selection.Position = xlTop
End Sub
Результат выполнения макроса – построение графика – представлен на рисунке 2.
Программирование отклика кнопки «Закрыть форму».
Откройте форму2, затем 2 раза щелкните по кнопке «ЗАКРЫТЬ» и напишите процедуру.
Private Sub CommandButton2_Click() UserForm2.Hide’ Скрыть форму2 End Sub
33
7. ИСПОЛЬЗОВАНИЕ ИНТЕРФЕЙСА ДЛЯ РАБОТЫ С ТАБЛИЦЕЙ
7.1. Добавление записей в таблицу. Нажмите на кнопку «ДОБАВЛЕНИЕ И УДАЛЕНИЕ автосамосвалов», расположенную на рабочем листе. Откроется форма1 (см. рисунок 7), счетчиком установите значения полей на первой пустой записи (в нашем примере – запись 4), заполните поля формы1 значениями, нажмите на кнопку «Добавить запись», данные перепишутся в таблицу. По введённым данным рассчитается суммарная производительность. Добавьте ещё записи в таблицу.
Рисунок 7. Добавление записей с помощью формы 1.
7.2. Удаление записей из таблицы. Счетчиком формы1 выберите номер, удаляемой записи. В полях формы отразятся значения ячеек таблицы из этой записи. Нажмите на кнопку «Удалить запись». В таблице запись будет удалена, нижележащие записи поднимутся вверх. В полях формы отразятся значения ячеек следующей строки (см. рисунок 8). В примере удалена 4 запись – самосвал ВК 889.
34
Рисунок 8. Удаление 4 записи из таблицы с помощью формы1.
Рисунок 9. Запуск формы2.
35
7.3. Вывод итоговых результатов. Нажмите на кнопку «Посмотреть ИТОГИ», расположенную на форме1. Будет запущена форма2 (см. рисунок 9). Нажмите на кнопку «ПОКАЗАТЬ» формы2. В форму2 будут выведены итоговые показатели с листа Excel (см. рисунок 10).
Рисунок 10. Просмотр результатов расчета
8 РАЗРАБОТКА БАЗЫ ДАННЫХ
8.1 В программе Access создаем базу данных [5], в которой будут храниться данные, аналогичные тем, что приведены таблице Excel.
На основании приведенных данных в таблице Excel создаем таблицу 3, содержащую описание полей производительности автосамосвалов по месяцам: январь, февраль, март, апрель, май, июнь. Эту таблицу создадим в среде Access.
Таблица 3. Проектирование таблицы «Производительность»
Имя поля |
Тип |
Свойства поля |
Подпись |
Код самосвала |
Счетчик |
|
|
Номер самосвала |
Числовой |
|
|
Январь |
Числовой |
|
|
Февраль |
Числовой |
|
|
Март |
Числовой |
|
|
Апрель |
Числовой |
|
|
Май |
Числовой |
|
|
Июнь |
Числовой |
|
|
36
8.2 Загружаем программу Access и выбираем команду «Создание новой базы данных», задаем имя базы данных Автосамосвалы.mdb. Выбираем объект «Таблицы», команду «Создать таблицу» в режиме «Конструктор». Вводим имена полей, задаем тип полей и заносим характеристики полей создаваемой таблицы (см. таблицу 3). После конструирования таблицы сохраняем её с заданием имени таблицы "Производительность". Открываем созданную таблицу (см. рисунок 11) и заносим в неё значения аналогичные таблице Excel (см. рисунок 1 или таблицу 1).
Рисунок 11. Таблица «Производительность» 8.3.1 В окне базы данных выбираем объект «Формы» и команду
«Создать» – «Автоформа: в столбец». Форму сохраняем под именем "Производительность" (см. рисунок 12).
Рисунок 12. Форма «Производительность»
37
8.4 Разработка запроса с вычисляемым полем по суммарной производительности каждого самосвала. Переходим на вкладку «Запросы». Выбираем «Создание запроса в режиме конструктора», выбираем таблицу «Производительность», отбираем все поля из этой таблицы в запрос. При закрытии запроса сохраняем его, открываем, проверяем правильность выполнения. Создаем вычисляемое поле в запросе, для чего открываем запрос в Конструкторе, выбираем свободное поле, в конце занятых полей, открываем «Построитель выражений» и формируем в нем выражение для вычисляемого поля «СумПроизв» (см. рисунок 13).
Рисунок 13. Формирование вычисляемого поля в «Построителе выражений».
Сохраняем и выполняем запрос, результат выполнения запроса представлен на рисунке 14.
Рисунок 14. Запрос «Суммарная производительность»
Запрос – это динамический набор данных, которые отражаются в момент его выполнения. В системе запрос создается и хранится в виде кода SQL.
38
Для просмотра кода SQL созданного запроса откройте его в Конструкторе запросов и выполните команду ЗАПРОС – Запрос SQL. Ниже приведен код запроса «Суммарная производительность».
SELECT Производительность.НомерСамосвала, Производительность.Январь, Производительность.Февраль, Производительность.Март, Производительность.Апрель, Производительность.Май, Производительность.Июнь, [Январь]+[Февраль]+[Март]+[Апрель]+[Май]+[Июнь] AS СумПроизв
FROM Производительность;
После слова SELECT указаны поля, отобранные в запрос и в том числе вычисляемое поле. После слова FROM указано имя таблицы, из которой отобраны поля.
8.5Отчет разрабатывается с использованием «Мастера отчетов», основой для отчета могут служить таблицы и запросы. В нашем случае основой отчета будет запрос, отбираем в него нужные поля из запроса, если данные можно сгруппировать, то нужно выполнить группировку и получить итоги по группе. В нашем примере группировки нет, поэтому итоговые поля вставим в отчет вручную в режиме «Конструктора». Для этого после создания отчета «Мастером» откройте его, посмотрите на результат, чтобы увидеть все недостатки и переключите отчет в режим «Конструктора».
8.6Добавление вычисляемого поля в отчет (см. рисунок 15).
Надпись
Поле ввода
Надпись
Рисунок 15. Добавление вычисляемого поля в отчет в режиме «Конструктора»
39