2013-04-09 12 views
7

Ich erstelle derzeit eine Excel-Arbeitsmappe, die eine Monte-Carlo-Simulation ausführt. Der Simulator-Code befindet sich derzeit jedoch in Javascript, und die vollständige Portierung auf VBA scheint angesichts der Unerfahrenheit des Teams mit dieser Sprache nicht trivial zu sein. Also, ich konnte die JavaScript-Komponenten in eine WSC-Datei integrieren, was gut funktioniert. (Vereinfachtes Beispiel unten.)Verwenden von Javascript in Excel

Sub Simulate() 
     Set ATPSim = GetObject("script:http://www.example.com/ATPSim.wsc") 
     'Set ATPSim = GetObject("script:C:\ATPSim.wsc") 
     Dim ParamOne As Integer 
     ParamOne = Range("B2").Value 
     Dim ParamTwo As Double 
     ParamTwo = Range("B3").Value 
     Dim ParamThree As Double 
     ParamThree = Range("B4").Value 
     Range("B1").Value = ATPSim.simulate(ParamOne, ParamTwo, ParamThree) 
    End Sub 

Leider ist dies mir erfordert den Javascript-Code zu hosten oder auf ungekünstelt Benutzer verlassen, um den absoluten Pfad zu aktualisieren. Gibt es eine in sich geschlossene Lösung? Ich würde es vorziehen, alles in einer .xlsm-Datei zu speichern, die per E-Mail an die Benutzer gesendet werden kann.

+1

Sie die js in einer Zelle gespeichert werden könnte (wenn es nicht zu viel Code ist) und dass dann eine Datei zu schreiben, verwenden, um auf den temporären Ordner des Benutzers. –

+0

Gefällt mir http://chandoo.org/wp/2010/05/06/data-tables-monte-carlo-simulations-in-excel-a-comprehensive-guide/? – deusxmach1na

+0

Die Temp-Ordner-Idee ist eine interessante, die funktionieren sollte. Ich muss mich darum kümmern. Der endgültige Simulationscode wird wahrscheinlich ziemlich komplex sein, aber ich bezweifle, dass er ein paar hundert KB überschreiten wird. Das Chandoo Tutorial verwendet reines Excel anstatt VBA oder JS. Leider hat diese Simulation viel zu viele Verzweigungspunkte, um mit einer Tabellenkalkulation zu modellieren (es würde ungefähr 100 Millionen Zellen erfordern). – Izomiac

Antwort

1

Sie sollten die JS in einer COM-Komponente hosten und WSH verwenden können, um darauf zuzugreifen.

Siehe Beispiel hier: How can I use JavaScript within an Excel macro?

+0

Das habe ich gemacht, AFAIK (vielleicht stimmt meine Terminologie nicht?). So wie ich es verstehe, erfordert dieser Ansatz die Registrierung des WSC oder die Aufbewahrung an einem vorhersehbaren Ort. Ich gehe nicht davon aus, dass die Endanwender auch so clever genug sind. – Izomiac

Verwandte Themen