Расчет значений функции от начального значения до конечного - VB
Формулировка задачи:
Всем доброго времени суток. Прошу Вашей помощи с таким заданием.
Создать диалоговое окно с тремя полями ввода:
Начальное значение
,Конечное значение
,Шаг
. Помимо этого необходимСчетчик
и две кнопки:ОК
иРабочий лист
. При нажатии кнопкиОК
происходит расчет значений функции от начального значения до конечного. Результат выводится в диалоговое окно. При нажатии кнопкиРабочий лист
результат выводится на рабочий лист. Номер листа устанавливается счетчиком. При разработке программы предусмотреть проверку согласованности начального и конечного значений. Функция может быть абсолютно любая с тремя переменными. Заранее спасибо.Решение задачи: «Расчет значений функции от начального значения до конечного»
textual
Листинг программы
Option Explicit
Dim WithEvents c1 As CommandButton
Dim WithEvents c2 As CommandButton
Dim WithEvents c3 As CommandButton
Sub RePaint(Optional ByVal Frame As Object): Const ii = 9, ll = 45: Static i&, v, w, d As Object, j(ii) As Object: Do While j(ii) Is Nothing: Set j(ii) = Controls.Add("vb.label", "label_autosize"): j(ii).AutoSize = 1: Exit Do: Loop: Do While d Is Nothing: Set d = CreateObject("scripting.dictionary"): d.CompareMode = 1: Exit Do: Loop: Do Until Frame Is Nothing: Set v = Frame: On Error GoTo g5: GoTo g1: Exit Do: Loop: For Each v In Controls
g1: Do While TypeName(v) = "Frame": On d(v.hWnd) GoTo g2, g4: d(v.hWnd) = 1: Set j(0) = Controls.Add("vb.picturebox", "pic" & v.hWnd & 0, v): j(0).Visible = 1: j(0).BorderStyle = 0: For i = 1 To ii - 1: Do While i < 5: Set j(i) = Controls.Add("vb.picturebox", "pic" & v.hWnd & i, j(0)): j(i).Visible = 1: j(i).BorderStyle = 0: Exit Do: Loop: Do While i >= 5: Set j(i) = Controls.Add("vb.frame", "fra" & v.hWnd & i, j(i - 4)): j(i).Visible = 1: d(j(i).hWnd) = 2: Exit Do: Loop: Next: For Each w In Controls: Do While w.Container.hWnd = v.hWnd And w.Name <> j(0).Name: Set w.Container = j(0): Exit Do: Loop: Next: GoTo g3
g2: For i = 0 To ii - 1: Do While i < 5: Set j(i) = Controls("pic" & v.hWnd & i): Exit Do: Loop: Do While i >= 5: Set j(i) = Controls("fra" & v.hWnd & i): Exit Do: Loop: Next
g3: With v: Set j(ii).Font = .Font: j(ii).Caption = .Caption: For i = 0 To ii - 1: Select Case i
Case 0: j(i).Move 0, 0, .Width, .Height
Case 1: j(i).Move 0, 0, .Width, j(ii).Height
Case 2: j(i).Move 0, 0, ll, .Height
Case 3: j(i).Move .Width - ll, 0, ll, .Height
Case 4: j(i).Move 0, .Height - ll, .Width, ll
Case 5: j(i).Move 0, 0, .Width, .Height: Set j(i).Font = .Font: j(i).Caption = .Caption
Case 6: j(i).Move 0, 0, .Width, .Height
Case 7: j(i).Move -.Width + ll, 0, .Width, .Height
Case 8: j(i).Move 0, -.Height + ll, .Width, .Height
End Select: If i = 0 Or i > 4 Then j(i).BackColor = .BackColor
Next: End With: Exit Do: Loop
g4: Next
g5: End Sub
Function vbCtrlAdd(ID$, Optional ByVal MovePos&, Optional ByVal ctrLeft& = -1, Optional ByVal ctrTop& = -1, Optional ByVal ctrWidth& = -1, Optional ByVal ctrHeight& = -1, Optional ByVal ctrVisible = 1, Optional ByVal ctrContainer As Object, Optional ByVal ctrText$, Optional ByVal ctrVal) As Object: Const stW = 15, stH = 4, stN = 1000, z = "?:%!.*", cs = "check*%bo*%:nd.,fra?,i:ge,label,list*,option.,picture*,shape,text*,ti?r": Static l&, t&, w&, h&, i&, ii&, ll&, tt&, v, r&, j$(), jj$, k$, d As Object, cc As Object: k = cs: For Each v In Array("me", "ma", ",!", "com", "button", "box"): i = i + 1: k = Replace(k, Mid$(z, i, 1), v): Next: If Len(Join(j)) = 0 Then j = Split(k, ",")
If Left(ID, 1) = "-" Then ID = Mid(ID, 2): r = IIf(r = 0, 5, r) Else r = IIf(r = 0, 90, r)
If InStr(1, ID, ".") = 0 Then
For i = 0 To UBound(j): If StrComp(Left(j(i), Len(ID)), ID, 1) = 0 Then ID = j(i): Exit For
Next: jj = IIf(r = 90, "vb." & ID, "forms." & ID & ".1")
Else: jj = ID: ID = Split(ID, ".")(1)
End If: ID = ID & "_dyn_": On Error Resume Next: For ii = ii + 1 To (ii * 2 + 1): Err.Clear: If Not ctrContainer Is Nothing Then Set cc = ctrContainer
If cc Is Nothing Then Set vbCtrlAdd = Controls.Add(jj, ID & ii): k = Me.hWnd Else Set vbCtrlAdd = Controls.Add(jj, ID & ii, cc): k = cc.hWnd
If Err.Number = 0 Then Exit For
Next: If d Is Nothing Then Set d = CreateObject("scripting.dictionary"): d.CompareMode = 1
If Not IsArray(d(k)) Then v = Array(0, 0, 0, 0, 0, 0) Else v = d(k)
l = v(0): t = v(1): ll = v(2): tt = v(3): w = v(4): h = v(5): ctrLeft = ctrLeft * r: ctrTop = ctrTop * r: ctrWidth = ctrWidth * r: ctrHeight = ctrHeight * r
If ll > 0 Then '0 Вправо // 1 Ниже // 2 Вправо и выше //3 Ниже и левее
Select Case MovePos
Case 0, 2: ctrLeft = IIf(ctrLeft < 0, l + w + r, ctrLeft): t = IIf(MovePos = 2, tt, t): ctrTop = IIf(ctrTop < 0, t, ctrTop): ctrWidth = IIf(ctrWidth < 0, w, ctrWidth): ctrHeight = IIf(ctrHeight < 0, h, ctrHeight)
Case 1, 3: l = IIf(MovePos = 3, ll, l): ctrLeft = IIf(ctrLeft < 0, l, ctrLeft): ctrTop = IIf(ctrTop < 0, t + h + r, ctrTop): ctrWidth = IIf(ctrWidth < 0, w, ctrWidth): ctrHeight = IIf(ctrHeight < 0, h, ctrHeight)
End Select
ElseIf ll = 0 Then ctrLeft = IIf(ctrLeft < 0, r, ctrLeft): ctrTop = IIf(ctrTop < 0, r, ctrTop): ctrWidth = IIf(ctrWidth < 0, r * stW, ctrWidth): ctrHeight = IIf(ctrHeight < 0, r * stH, ctrHeight): v(2) = ctrLeft: v(3) = ctrTop
End If: With vbCtrlAdd: .Move ctrLeft, ctrTop, ctrWidth, ctrHeight: .Visible = ctrVisible: .Caption = ctrText: .Text = ctrText: .Value = ctrVal: End With
v(0) = IIf(ctrLeft > l, ctrLeft, v(0)): v(1) = IIf(ctrTop > t, ctrTop, v(1)): v(4) = ctrWidth: v(5) = ctrHeight: d(k) = v
End Function
Sub remo(): Dim v: On Error Resume Next: For Each v In Controls: Controls.Remove v: Next: End Sub
Private Sub c1_Click()
remo
vbCtrlAdd "lab", 1, 1, 1, ctrWidth:=100, ctrHeight:=4, ctrText:="Отметье важные папки для резервного копирования"
vbCtrlAdd "Check", 1, 1, 12, ctrText:="Мои документы"
vbCtrlAdd "Check", 1, 1, 17, ctrText:="Моя музыка"
vbCtrlAdd "Check", 1, 1, 22, ctrText:="Мои рисунки"
Set c2 = vbCtrlAdd("comm", 0, 1, 6, ctrWidth:=10, ctrText:="Назад <<")
Set c3 = vbCtrlAdd("comm", 0, 11, 6, ctrWidth:=10, ctrText:="Далее>>")
End Sub
Private Sub c2_Click()
Form_Load
End Sub
Private Sub c3_Click()
MsgBox "Подождите пока мастер закончит удалять ваши данные, это займёт несколько минут"
End Sub
Private Sub Form_Load()
remo
vbCtrlAdd "lab", 1, 1, 1, ctrWidth:=100, ctrText:="Вас приветствует мастер форматирования жесткого диска" & vbLf & _
"Если вы готовы к форматированию нажмите далее"
Set c1 = vbCtrlAdd("comm", 1, 1, 6, ctrWidth:=10, ctrText:="Далее>>")
Me.Caption = "Formatting"
End Sub