Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Mehrere Makros parallel / Mehrere Excel-Instanzen

Forumthread: 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
Anzeige

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
Anzeige
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
;
Anzeige
Anzeige

Infobox / Tutorial

Mehrere Makros parallel in Excel ausführen


Schritt-für-Schritt-Anleitung

Um mehrere Excel-Instanzen zu öffnen und Makros parallel auszuführen, folge diesen Schritten:

  1. Instanzen erstellen: Du kannst neue Excel-Instanzen mit VBA erstellen. Verwende die CreateObject-Methode.

    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'")
               .Run ("'c:\Berechnungsmappe.xlsm'!Auswertemakro_1")
           End With
       Next Instanz_Number
    End Sub
  2. Makro für die Auswertung: Definiere dein Auswertemakro so, dass es nicht blockierend ist. Nutze Application.OnTime, um den Start des Makros zu timen.

    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
  3. Parameter anpassen: Stelle sicher, dass du die Anzahl der Instanzen an die Leistung deines PCs anpasst. Wenn du z.B. nur 8 Kerne hast, sind 6 Instanzen ideal.


Häufige Fehler und Lösungen

  • Problem: Das Makro wartet, bis die vorherige Instanz vollständig verarbeitet ist.

    • Lösung: Nutze Application.OnTime, um das Makro nicht blockierend zu starten.
  • Problem: Excel lässt sich nicht in mehreren Instanzen öffnen.

    • Lösung: Stelle sicher, dass du die Instanzen über CreateObject("Excel.Application") startest.

Alternative Methoden

Wenn du Schwierigkeiten hast, mehrere Excel-Instanzen zu öffnen, gibt es alternative Methoden:

  • Shell-Befehl: Du kannst auch den Shell-Befehl verwenden, um Excel mit bestimmten Argumenten zu starten. Dies kann in bestimmten Fällen hilfreich sein, ist jedoch weniger flexibel als die Verwendung von VBA.

    Shell "C:\Path\to\Excel.exe C:\Berechnungsmappe.xlsm", vbNormalFocus
  • Batch-Datei: Erstelle eine Batch-Datei, um mehrere Instanzen von Excel zu starten.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du mehrere Excel-Instanzen öffnen und Makros parallel ausführen kannst:

  1. Datenanalysen: Wenn du mehrere Berechnungen oder Analysen durchführen musst, kannst du dies parallel tun, um die Effizienz zu steigern.

  2. Berichte generieren: Wenn du Berichte aus verschiedenen Datenquellen erstellen musst, kannst du dafür mehrere Instanzen nutzen, um die Berichterstellung zu beschleunigen.


Tipps für Profis

  • Ressourcen überwachen: Achte darauf, die Systemressourcen im Auge zu behalten, während du mehrere Excel-Instanzen öffnest. Zu viele Instanzen können die Performance deines PCs stark beeinträchtigen.

  • Optimierung des Codes: Optimiere deinen VBA-Code, um die Ausführungszeit weiter zu reduzieren. Vermeide unnötige Berechnungen und verwende effizientere Algorithmen.

  • Benutzerfreundlichkeit: Füge Fortschrittsanzeigen oder Statusmeldungen hinzu, damit du den Überblick über den Fortschritt deiner Makros behältst.


FAQ: Häufige Fragen

1. Kann ich Excel mehrere Instanzen öffnen, um Performance zu verbessern? Ja, das Eröffnen mehrerer Excel-Instanzen kann helfen, die Performance zu verbessern, insbesondere bei rechenintensiven Aufgaben.

2. Wie viele Instanzen sollte ich gleichzeitig öffnen? Es hängt von der Anzahl der Prozessoren deines PCs ab. Bei 8 Kernen sind 6 Instanzen in der Regel optimal.

3. Was tun, wenn Excel nicht mehrere Instanzen öffnen kann? Stelle sicher, dass du die richtige Methode (CreateObject) verwendest und dass keine anderen Instanzen von Excel im Hintergrund laufen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige