|
|
|
| Есть несколько полей, названных a,b,c (их значения соответственно 2, 3, 1).
Есть 4-е (текстовое) поле, в котором введены данные (например a+b-с).
Необходимо в 5-м поле вывести то же выражение, но с данными (чтобы получилось 2+3-1)...
Народ, подскажите, как это реализовать... | |
|
| |
|
|
|
| Может как-то так, модуль формы:
Private Function funResultat(Formula As String)
Dim strLitera As String
Dim i As Integer
Dim strResultat As String
If Len(Formula) > 0 Then
For i = 1 To Len(Formula)
strLitera = Mid(Formula, i, 1)
If funIsField(strLitera) Then
strResultat = strResultat & Me.Controls(strLitera)
Else
strResultat = strResultat & strLitera
End If
Next i
funResultat = strResultat
Else
funResultat = vbNullString
End If
End Function
Private Function funIsField(strLitera As String) As Boolean
On Error Resume Next
funIsField = Not Me.Controls(strLitera) Is Nothing
End Function
Private Function funCalculation()
Dim strResultat As String
strResultat = funResultat(Nz(Me.Formula, vbNullString))
If Len(strResultat) > 0 Then
Me.Resultat = strResultat
Me.ResultatValue = Eval(strResultat)
End If
End Function
Private Sub a_AfterUpdate()
funCalculation
End Sub
Private Sub b_AfterUpdate()
funCalculation
End Sub
Private Sub c_AfterUpdate()
funCalculation
End Sub
Private Sub Formula_AfterUpdate()
funCalculation
End Sub
|
| |
|
| |
|
|
|
| Или запросом с функцией:
SELECT tbl1.ID, tbl1.a, tbl1.b, tbl1.c, tbl1.Formula, funResultat(tbl1.a, tbl1.b, tbl1.c, tbl1.Formula) AS Resultat
FROM tbl1;
Public Function funResultat(aValue, bValue, cValue, strFormula As String) As String
Dim strLitera As String
Dim i As Integer
Dim strResultat As String
If Len(strFormula) > 0 Then
For i = 1 To Len(strFormula)
strLitera = Mid(strFormula, i, 1)
Select Case strLitera
Case Is = "a"
strResultat = strResultat & aValue
Case Is = "b"
strResultat = strResultat & bValue
Case Is = "c"
strResultat = strResultat & cValue
Case Else
strResultat = strResultat & strLitera
End Select
Next i
funResultat = strResultat
Else
funResultat = vbNullString
End If
End Function
|
| |
|
| |
|
|
|
| чтобы я без Вас делала!!!!!!!!!!!!!!!!!!!!!!!!!!!!! огромнейшее спасибо!!!!!! получилось!!!!!!!!!!!!!!!! | |
|
| |
|
|
|
| Если немного изменить функцию, она будет возвращать не строку, а результат выражения:
Public Function funResultat(aValue, bValue, cValue, strFormula As String)
Dim strLitera As String
Dim i As Integer
Dim strResultat As String
If Len(strFormula) > 0 Then
For i = 1 To Len(strFormula)
strLitera = Mid(strFormula, i, 1)
Select Case strLitera
Case Is = "a"
strResultat = strResultat & aValue
Case Is = "b"
strResultat = strResultat & bValue
Case Is = "c"
strResultat = strResultat & cValue
Case Else
strResultat = strResultat & strLitera
End Select
Next i
funResultat = Eval(strResultat)
Else
funResultat = 0
End If
End Function
|
Обрабатывает так-же скобки и возведение в степень. | |
|
| |
|
|
|
|
| Всегда рады. | |
|
| |