Werte Experten-Gemeinde!
Vorab schon einmal vielen Dank an Euch alle, die Ihr mir schon so oft im Forum weitergeholfen habt!
Nun habe ich ein kniffliges Problem, das ich trotz langer Suche und Ausprobieren nicht schön gelöst bekomme.
Ich habe eine sehr umfangreiche Arbeitsmappe für Messwertauswertungen, in der interative Berechnungen und Solver-Rechnungen laufen. Der Solver wird per Makro gestartet. Die Berechnungsdauer - nach Starten des Makros - beträgt ca. 10 min. Ich mache einen Haufen an Parametervariationen, so dass ich die Arbeitsmappe ca. 30 Mal - mit jeweils anderen Werten - rechnen lassen muss. Wenn ich das seriell mache, vergehen also ca. 450 min = mehr als 7 Stunden. Das wäre akzeptabel, jedoch besteht die Gefahr, dass ich nach der Erledigung der Auswertung einen Fehler finde und das ganze dann nochmal laufen muss. Ich würde die Zeit gerne verkürzen und weiß, dass ich die Mappen auch parallel (auf ein und demselben flotten PC) rechnen lassen kann, indem ich jede Mappe in einer neuen Excel-Instanz öffne. Das klappt prinzipiell, hat aber noch seine Macken.
Lange Rede, kurzer Sinn:
Ich möchte automatisiert die Vorlagen-Datei z.B. in 10 Excel-Instanzen öffnen und dann in jeder Instanz das Auswertemakro zentral starten. Das habe ich - auch mit Tipps aus diesem Forum so gemacht.
Methode: Instanzen starten per CreateObject("Excel.Application")
In meiner "Instanzen-Starte-Mappe" Instanz-Starter.xlsm https://www.herber.de/bbs/user/119711.xlsm starte ich folgendes Makro
Sub neue_Instanz()
Dim Instanz_Number As Integer
Dim appExcel(9) As Excel.Application
For Instanz_Number = 0 To 9
Set appExcel(Instanz_Number) = CreateObject("Excel.Application")
With appExcel(Instanz_Number)
.Visible = True
.Workbooks.Open ("C:\Berechnungsmappe.xlsm")
.Run("'c:\Berechnungsmappe.xlsm'!Datenholemakro'") 'hier hole ich mir die spezifischen Eingabedaten für jede Instanz
.Run ("'c:\Berechnungsmappe.xlsm'!Auswertemakro_1") ' das ist das langdauernde
End With
Next Instanz_Number
End Sub
Die Auswertemakros liegen in der Datei Berechnungsmappe.xlsm https://www.herber.de/bbs/user/119712.xlsm und sehen im Grunde so aus: _
Ich ersetze hier der Einfachheit halber die Solver-Schritte usw... durch eine Wartedauer von 10 _
sec.
Public Sub Auswertemakro_1()
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 10
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.wait waitTime
'Dann Datei unter bestimmtem Namen speichern...
End Sub
Das Problem hierbei ist nun, dass die for-schleife im Sub "neue_Instanz" solange "stehen bleibt", bis das Auswertemakro_1 durchgelaufen ist. Sprich, er öffnet erst dann eine neue Instanz, wenn die erste mit der (langen) Rechnung fertig ist. Sprich, ich hab nix von der Parallelisierung und keine Zeitersparnis, obwohl der PC ja doch dazu in der Lage wäre...Weiß jemand Rat, wie ich das hinbekomme? Ich hab auch schon mit Shell-Befehl und workbook_open() versucht, aber da kann ich ja immer nur die gleiche Datei starten und meine, dass ich dann nicht mehr zentral auf die Instanzen per via zugreifen kann...
Ich hoffe, dass ich mein Problem klar machen konnte und hoffe auf Euren Experten-Tipp!
Danke!!
Ripple