C'è un modo molto più semplice per gestire Formule, ma servirebbe capire o avere un Denominatore comune… ovvero ad esempio capire e sapere quanti sono i Parametri dinamici delle Formule…
Ipotizzo solo a titolo di Esempio di avere sempre 3 Parametri da poter definire man mano.
Ipotiziamo che nella tabella con le Formule, che chiamiamo [TFormule] (che ha Pk=Numerico e campo Stringa con la Formula) tu abbia una Formula scritta così:
P1*P2/(P3*0.20) 'Questa è la Formula1
P3+P2-(P1*3) 'Questa è la Formula2
Ora nella query che generi dalla Tabella dati con un campo FK che lega alla Tabella Formule ricavi la Formula:
SELECT tblDati.Campo1, tblDati.Campo2, tblDati.Campo3r, TFormule.Formula, ExecFormula([Formula],[Campo1],[Campo2],[Campo3]) AS RisultatoFormula
FROM tblDati INNER JOIN TFormule ON tblDati.IdFormula = TFormule.IdFormula;
Come vedi la Query ha una chiamata a Funzione Esterna…
Function ExecFormula(pFormula As String, P1, P2, P3)
Dim sFormula As String
sFormula = Replace(pFormula, "P1", Chr(34) & P1 & Chr(34))
sFormula = Replace(sFormula, "P2", Chr(34) & P2 & Chr(34))
sFormula = Replace(sFormula, "P3", Chr(34) & P3 & Chr(34))
ExecFormula = Eval(sFormula)
End Function
In questo modo passi la funzione in stringa, sostituisci i Parametri alle Variabili ed il Valutatore di Espressioni fa il calcolo.
Chiaramente se, il numero di aprametri cambia, andrai a valurare nella Funzione il prametro mancante…
Function ExecFormula(pFormula As String, P1, P2, P3)
Dim sFormula As String
sFormula=pFormula
If Instr(sFormula,"P1")>0 Then sFormula = Replace(sFormula, "P1", Chr(34) & P1 & Chr(34))
If Instr(sFormula,"P2")>0 Then sFormula = Replace(sFormula, "P2", Chr(34) & P2 & Chr(34))
If Instr(sFormula,"P3")>0 Then sFormula = Replace(sFormula, "P3", Chr(34) & P3 & Chr(34))
ExecFormula = Eval(sFormula)
End Function