
Excel 2019 Windows
Ich habe eine 4-seitige Arbeitsmappe und jede Seite hat ein VBA-Modul, das verschiedene Aufgaben mit den Daten aus dem vorherigen Arbeitsblatt ausführt. Sie müssen also nacheinander ausgeführt werden, aber NUR, wenn das vorherige abgeschlossen ist und im Moment manuell ausgeführt wird.
Ich hätte der Argumentation halber gerne ein einzelnes Modul/Makro namens „RunAll“, das beim Anklicken/Aufrufen dieselbe Aufgabe ausführt.
Modul 1. Importiert und bereinigt Daten aus einer durch Trennzeichen getrennten TXT-Datei in Blatt 1. Die Daten bestehen aus 2000 bis 110.000 Zeilen.
Modul 2. Betrachtet Blatt 1, wählt bestimmte Daten aus und formatiert sie in Blatt 2.
Modul 3. Betrachtet Blatt 2, wählt bestimmte Daten aus und formatiert sie in Blatt 3.
Modul 4. Betrachtet Blatt 3, wählt bestimmte Daten aus und formatiert sie in Blatt 4.
Jedes Modul ist so codiert, dass es weiß, welches Blatt es anzeigen und wo es seine Daten einfügen muss.
Dies ist eine sehr vereinfachte Version, sodass Sie keinen langen Beitrag zum Lesen angezeigt bekommen. Wenn Sie sie jedoch manuell nacheinander ausführen, funktionieren sie alle perfekt.
Aber wenn ich einfach ein Maco ausprobiere, das besagt:
Call module1
Call module2
Call module3
Call module4
Auf manchen Blättern geraten die Daten durcheinander und ich vermute, dass die Ausführung mancher Module länger dauert als die anderer (Modul 1 und Modul 2), sodass die anderen Module ausgeführt werden, bevor alle Daten richtig importiert und formatiert sind und bevor die vorhergehenden Module ihre Aufgaben abgeschlossen haben.
Ich versuche also Folgendes …
Call Module1 (and only when it has finished then)
Call Module2 (and only when it has finished then)
Call Module3 (and only when it has finished then)
Call Module4
Ich habe online ausgiebig nach möglichen Antworten gesucht, bevor ich hier gepostet habe, aber nichts scheint meinen Anforderungen zu entsprechen und ein großer Teil meiner Erkenntnisse geht völlig über meinen Horizont.
Antwort1
VBA ist ein Single-Threaded-System. Die verschiedenen Aufrufe werden also nicht gleichzeitig ausgeführt.
@Mathieu trifft den Nagel auf den Kopf. Wenn Sie das Makro „Modul 1“ manuell aufrufen, während Blatt 1 ausgewählt ist, was passiert aber, wenn Sie es manuell ausführen, während beispielsweise Blatt 2 oder 3 ausgewählt ist? Sie müssen hauptsächlich die Verweise auf Blatt Nr. fest codieren.