2017-02-26 14 views
0

einfaches Problem. Ich habe eine Zeichenfolge, die eine Formel darstellt.Excel VBA - Berechnen in VBA

Wie

Dim formula As String 
formula = Replace(processFormula(2016, 9000, constants, formulaRow), "##", 9000) 
'formula has the value "(1007,27*((9000 - 8820)/10000)+1400)*((9000 - 8820)/10000)" 

MsgBox (formula) 

'Evaluate(formula) not working sadly 

Jetzt möchte ich es in VBA bewerten und das Ergebnis zurück. Ich bekomme nicht, dass Evaluate für die Berechnung arbeitet.

processFormula ist eine Funktion, die eine Formel generiert und einen String zurückgibt. Also wird ein String in die Ersetzungsfunktion eingefügt, die '##' durch eine Zahl ersetzt. Nichts magisches hier. In Bezug auf die Debugger-Formel ist ein String mit dem oben angegebenen Wert (es wird direkt vom Debugger kopiert).

Gibt es einen einfachen und einfachen Weg?

Danke, ich hoffe, es ist kein Duplikat.

+0

Was ist 'processFormula'? Ist es irgendeine Funktion? Welche Ausgabe kommt von 'processFormula'? – harun24hr

+0

Es ist eine Zeichenfolge, die zurückgegeben wird. Also habe ich eine Zeichenfolge in Replace eingefügt. – sascha10000

+0

sollten Sie das Komma durch einen Punkt in 1007,27 ersetzen – h2so4

Antwort

1

sollten Sie das Komma durch einen Punkt ersetzen

Dim formula As String 
formula = replace(Replace(processFormula(2016, 9000, constants, formulaRow), "##", 9000),",",".") 
'formula has the value "(1007,27*((9000 - 8820)/10000)+1400)*((9000 - 8820)/10000)" 

MsgBox (formula) 

Evaluate(formula) 'should work now ;o) 
+0

hmm, du hast Recht. – sascha10000

+0

Ja: Evaluate erwartet immer US-amerikanische Formeln –

0

Verwenden Sie die folgenden Sub.

Sub Calculate() 
Dim x As Double 
    x = ((100 * 20)/30 * 500) 
    Range("A1") = x 
    MsgBox x 
End Sub 
+0

Wie ich schon sagte, ich habe eine Zeichenfolge. Ich habe es in meiner Frage korrigiert. Ich denke nicht, dass ich einen String doppelt vergeben kann, auch wenn es ein Forum ist. Recht? – sascha10000

1

sollte es kein Problem sein:

Sub eval() 
    MsgBox Evaluate((100 * 20)/30 * 500) 
End Sub 

enter image description here

, die die äquivalente Zellenformel entspricht. Hinweis: Dies ist nicht das gleiche wie:

(100*20)/(30*500) 

EDIT # 1:

Dies funktioniert auch:

Sub eval2() 
    Dim s As String 
    s = "((100 * 20)/30 * 500)" 
    MsgBox Evaluate(s) 
End Sub 
+0

Das Problem ist, dass es eine Zeichenfolge ist. Ich werde es in meiner Beschreibung ändern – sascha10000

+0

@ sascha10000 Siehe meine ** EDIT # 1 ** –

+0

Ich würde die genaue Formel in die Beschreibung setzen. Und ich benutze evaluieren, wie Sie sagen. Es funktioniert nicht. – sascha10000