Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1608to1612
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Mehrere Makros parallel / Mehrere Excel-Instanzen

Mehrere Makros parallel / Mehrere Excel-Instanzen
10.02.2018 23:25:44
Ripple
Mehrere Makros parallel / Mehrere Excel-Instanzen
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

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrere Makros parallel / Mehrere Excel-Instanzen
10.02.2018 23:43:41
mumpel
Hallo!
M.W. ist VBA nicht Multithread-fähig. Da immer nur eine VBE-Instanz laufen kann läuft auch immer nur eine Prozedur.
Gruß, René
AW: Mehrere Makros parallel / Mehrere Excel-Instanzen
11.02.2018 11:28:14
Nepumuk
Hallo,
versuch es mal so:
Public Sub Auswertemakro_1()
    Application.OnTime Now + TimeSerial(0, 0, 1), "Start"
End Sub

Private Sub Start()
    ' Hier wird die eigentliche Auswertung gemacht
End Sub

Gruß
Nepumuk
Anzeige
Anmerkung
11.02.2018 12:26:00
Nepumuk
Hallo nochmal,
ich würde folgendes berücksichtigen: Ein Makro benutzt 100% eines Prozessors bei 8 Prozessoren sind das 12,5 Prozent der einzelnen Prozessoren. Wenn du die Mappe 8mal startest werden also 100% aller 8 Prozessoren ausgelastet. Daher bringt das Starten von 10 Instanzen keinen Vorteil mehr.
Gruß
Nepumuk
AW: Anmerkung
12.02.2018 10:30:18
Ripple
Hi Nepomuk!
Vielen Dank für die schnelle Hilfe!
Ich hab es verstanden, was dein pfiffiger Trick ist. Der Befehl

Application.OnTime Now + TimeSerial(0, 0, 1), "Start"
im Auswertemakro_1 bewirkt, dass das Start-Sub erst anläuft, nachdem das Auswertemakro_1 beendet wurde und damit das Zentralmakro neue_Instanz() nicht mehr auf Beendigung des Start()-Makros warten muss. Genial!
Zum Thema Prozessoren: Hast du völlig recht! Ich habe tatsächlich nur 8 Prozessoren, daher bringt natürlich jede Instanz >8 gar nichts. Um den Rechner nicht völlig in die Knie zu zwingen, lass ich jetzt nur 6 parallele Excels zu..
Vielen Dank für die Tipps!
Grüße, Ripple
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige