Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Жикривецкий РГР.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
610.82 Кб
Скачать

Расчетная смета в режиме отображения формул

Рисунок 3. Расчетная смета в режиме отображения формул

Общий вид Главной формы “Изменение исходных данных”

Рисунок 4. формы “Изменение исходных данных”

Описание элементов управления

Первая форма (UserForm1) состоит из двух рамок: «Изменение количества материалов по разделам» (Frame1) и «Подсчёт итогов» (Frame2), - и копки «Выход» (CommandButton5), предназначенной для закрытия формы.

На Frame1 находятся: 4 графы, соответствующих видам работ (Label8, Label9, Label10, Label11 соответственно); 4 текстовых окна (Textbox8, Textbox9, Textbox110, Textbox11, соответственно), предназначенных для ввода требуемого количества проводимых работ; 4 счётчика (SpinButton1, SpinButton2, SpinButton3, SpinButton4 соответственно), позволяющие изменять значения в текстовых окнах на единицу (+1/-1) и кнопка «Внести изменения на смете» (CommandButton2), позволяющая внести на смету значения, которые мы записали в текстовые окна.

На Frame2 находятся: 7 граф, соответствующих видам итогов (Label1, Label2, Label3, Label4, Label5, Label6, Label7 соответственно); 7 текстовых окон (Textbox1, Textbox2, Textbox3, Textbox4, Textbox5, Textbox6, Textbox7 соответственно), предназначенных для вывода значений, соответствующих своей графе; кнопка «Подсчитать итоги» (CommandButton4), после нажатия которой производится подсчёт итогов и вывод их в соответствующие текстовые окна и кнопка «Построить диаграмму» (CommandButton3), которая является неактивной, пока не будут подсчитаны итоги, и при нажатии которой запускается вторая форма «Построить диаграмму» (UserForm2).

Описание функционирование формы

Private Sub CommandButton4_Click()

‘Подтверждение изменений (если выбрано “Нет”, то выход из программы)’

If MsgBox("Вы уверены, что хотите изменить данные?", vbYesNo + vbQuestion, "Изменение данных") = vbNo Then

GoTo vas

End If

‘Проверка на ввод данных (если данные не введены, то происходит выход из SUB и вывод окна, информирующего об ошибке)’

If TextBox8.Text = Empty Then

MsgBox "Введите данные!", vbCritical

GoTo vas

End If

If TextBox9.Text = Empty Then

MsgBox "Введите данные!", vbCritical

GoTo vas

End If

If TextBox10.Text = Empty Then

MsgBox "Введите данные!", vbCritical

GoTo vas

End If

If TextBox11.Text = Empty Then

MsgBox "Введите данные!", vbCritical

GoTo vas

End If

‘Если все условия выполнены, то происходит перенос данных на лист Exel

Worksheets(1).Range("F6") = TextBox8.Text

Worksheets(1).Range("F9") = TextBox9.Text

Worksheets(1).Range("F13") = TextBox10.Text

Worksheets(1).Range("F17") = TextBox11.Text

TextBox1.Text = Worksheets(1).Range("J20")

TextBox2.Text = Worksheets(1).Range("K20")

vas: End Sub

‘Кнопка “Выход”, которая выгружает UserForm из оперативной памяти ПК, для того, чтобы каждый раз при запуске формы она пересчитывалась заново’

Private Sub CommandButton5_Click()

Unload UserForm1

End Sub

Private Sub SpinButton1_SpinDown()

‘Если TextBox8 пуст, то по умолчанию задается значение 0

If TextBox8.Value = Empty Then

TextBox8.Value = 0

End If

‘Если значение меньше нуля, то оно изменяется на ноль (не допускается возможность задания отрицательных значений)’

If TextBox8.Value < 0 Then

TextBox8.Value = 0

End If

‘Если значение больше единицы, то оно уменьшается на единицу)’

If TextBox8.Value >= 1 Then

TextBox8.Value = TextBox8.Value – 1

‘В случае изменения данных, очищаются Итоги’

TextBox1.Text = Empty

TextBox2.Text = Empty

TextBox3.Text = Empty

TextBox4.Text = Empty

TextBox5.Text = Empty

TextBox6.Text = Empty

TextBox7.Text = Empty

End If

End Sub

Так обрабатываются все подобные события для SpinButton

Private Sub SpinButton1_SpinUp()

‘Если TextBox1 пуст, то по умолчанию задается значение 0

If TextBox8.Value = Empty Then

TextBox8.Value = 0

End If

‘Если значение меньше нуля, то оно изменяется на ноль (не допускается возможность задания отрицательных значений)’

If TextBox8.Value < 0 Then

TextBox8.Value = 0

End If

‘Если значение больше нуля, то оно увеличивается на единицу)’

If TextBox8.Value >= 0 Then

TextBox8.Value = TextBox8.Value + 1

‘В случае изменения данных, очищаются Итоги’

TextBox1.Text = Empty

TextBox2.Text = Empty

TextBox3.Text = Empty

TextBox4.Text = Empty

TextBox5.Text = Empty

TextBox6.Text = Empty

TextBox7.Text = Empty

End If

End Sub

Так обрабатываются все подобные события для SpinButton

Private Sub CommandButton3_Click()

‘В случае если налоги не рассчитаны, появляется ошибка и завершается Sub

If TextBox3.Text = Empty Or TextBox4.Text = Empty Or TextBox5.Text = Empty Or TextBox6.Text = Empty Or TextBox7.Text = Empty Then

MsgBox "Рассчитайте налоги!"

Exit Sub

End If

‘В противном случае открывается UserForm2

UserForm2.Show

End Sub

Private Sub UserForm_Activate()

‘При активации формы она копирует введенные данные с листа Exel: Исходные данные, Сумму основных затрат, Сумму затрат на материалы’

TextBox8.Text = Cells(6, 6)

TextBox9.Text = Cells(9, 6)

TextBox10.Text = Cells(13, 6)

TextBox11.Text = Cells(17, 6)

TextBox1.Text = Worksheets(1).Range("J20")

TextBox2.Text = Worksheets(1).Range("K20")

End Sub

Private Sub CommandButton1_Click()

‘В случае если “сумма основных затрат” или “сумма затрат на материалы” – пустые поля, то появляется ошибка и завершается Sub

If TextBox1.Text = Empty Or TextBox2.Text = Empty Then

MsgBox "Подтвердите изменения!", vbCritical, "Ошибка"

Else

‘Расчет итогов по формулам’

x = TextBox1.Text

y = TextBox2.Text

q = Int(0.15 * x)

w = Int(0.5 * (x - y))

e = Int(0.3 * (x - y))

r = Int(x + q + w + e)

t = Int(0.18 * r)

TextBox3.Text = q

TextBox4.Text = w

TextBox5.Text = e

TextBox7.Text = r

TextBox6.Text = t

‘Передача значений на лист Exel’

Worksheets(1).Range("J21") = TextBox3.Text

Worksheets(1).Range("J22") = TextBox4.Text

Worksheets(1).Range("J23") = TextBox5.Text

Worksheets(1).Range("J24") = TextBox6.Text

Worksheets(1).Range("J25") = TextBox7.Text

End If

End Sub