Код: Выделить всё
4*r^2 либо b*c*sin(A)/2
Код: Выделить всё
от ворсулы видно что переменная это r, во второй формуле больше переменных
Модератор: Naeel Maqsudov
Код: Выделить всё
4*r^2 либо b*c*sin(A)/2
Код: Выделить всё
от ворсулы видно что переменная это r, во второй формуле больше переменных
Код: Выделить всё
[color=darkblue]Sub[/color] test()
f = InputBox("Введите формулу", , "4*r^2")
r = InputBox("Введите значение R", , "5")
MsgBox "Результат: " & Application.Evaluate(Replace(f, "r", r))
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
он для ввода данных выдал всего 2 поля ввода данных для B и для C.b*c*sin(A)/2
Код: Выделить всё
[color=darkblue]Dim[/color] arr, coll [color=darkblue]As[/color] Collection
[color=darkblue]Private[/color] [color=darkblue]Sub[/color] CommandButton1_Click()
txt = Me.TextBox_Main
[color=darkblue]For[/color] [color=darkblue]Each[/color] w [color=darkblue]In[/color] coll
txt = Replace(txt, w, Значение(w))
[color=darkblue]Next[/color]
Me.TextBox_tmp = txt: [color=darkblue]On[/color] [color=darkblue]Error[/color] [color=darkblue]Resume[/color] [color=darkblue]Next[/color]
Me.TextBoxResult = Application.Evaluate(Replace(txt, ",", "."))
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
[color=darkblue]Private[/color] [color=darkblue]Sub[/color] TextBox_Main_Change()
ПоискПеременных (Me.TextBox_Main)
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
[color=darkblue]Sub[/color] ПоискПеременных([color=darkblue]ByVal[/color] txt [color=darkblue]As[/color] [color=darkblue]String[/color])
СписокФункций = Array("sin", "cos", "tg", "exp")
ЦифрыИСимволы = "0123456789+-*/^()"
[color=darkblue]For[/color] [color=darkblue]Each[/color] w [color=darkblue]In[/color] СписокФункций: txt = Replace(txt, w, " "): [color=darkblue]Next[/color]
[color=darkblue]For[/color] i = 1 [color=darkblue]To[/color] Len(ЦифрыИСимволы): txt = Replace(txt, Mid(ЦифрыИСимволы, i, 1), " "): [color=darkblue]Next[/color]
arr = Split(Application.Trim(txt), " ")
Me.TextBoxResult = Application.Trim(txt)
[color=darkblue]Set[/color] coll = [color=darkblue]New[/color] Collection: [color=darkblue]On[/color] [color=darkblue]Error[/color] [color=darkblue]Resume[/color] [color=darkblue]Next[/color]
[color=darkblue]For[/color] [color=darkblue]Each[/color] w [color=darkblue]In[/color] arr
coll.Add w, [color=darkblue]CStr[/color](w)
[color=darkblue]Next[/color]
[color=darkblue]For[/color] i = 1 [color=darkblue]To[/color] 7
Me.Controls("Textbox" & i).Visible = coll.Count >= i
Me.Controls("Label" & i).Visible = coll.Count >= i
Me.Controls("Label" & i).Caption = UCase(coll(i)) & " = "
[color=darkblue]Next[/color]
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
[color=darkblue]Private[/color] [color=darkblue]Sub[/color] UserForm_Initialize()
Me.TextBox_Main = "12*a+a/c+d^2-sin(e*c)"
[color=darkblue]End[/color] Sub
[color=darkblue]Function[/color] Значение([color=darkblue]ByVal[/color] w [color=darkblue]As[/color] [color=darkblue]String[/color]) [color=darkblue]As[/color] [color=darkblue]Double[/color]
[color=darkblue]On[/color] [color=darkblue]Error[/color] [color=darkblue]Resume[/color] [color=darkblue]Next[/color]
[color=darkblue]For[/color] i = 1 [color=darkblue]To[/color] 7
[color=darkblue]If[/color] Me.Controls("Label" & i).Caption = UCase(w) & " = " [color=darkblue]Then[/color]
Значение = [color=darkblue]CDbl[/color](Replace(Me.Controls("Textbox" & i), ".", ","))
[color=darkblue]Exit[/color] [color=darkblue]Function[/color]
[color=darkblue]End[/color] [color=darkblue]If[/color]
[color=darkblue]Next[/color]
[color=darkblue]End[/color] [color=darkblue]Function[/color]
Просто ввести другую формулу в соответствующее поле на форме:а как сделать так что бы он сам их создавал столько сколько нужно если там не 4 переменных а всего 3 или 2 или больше.
Код: Выделить всё
[color=darkblue]Private[/color] [color=darkblue]Sub[/color] UserForm_Initialize()
Me.TextBox_Main = "12*a+a/c+d^2-sin(e*c)"
[color=darkblue]End[/color] [color=darkblue]Sub[/color]