VBScript - Wie kann ich das Programm warten lassen, bis der Vorgang abgeschlossen ist?

Ich habe ein Problem in einem VBScript, das ich mit einem VBA / Excel-Makro und einem HTA verwende. Das Problem ist nur das VBScript, ich habe die anderen beiden Komponenten, d. H. Das VBA-Makro und das HTA-Front-End, die perfekt funktionieren. Aber bevor ich das Problem erkläre, muss ich Ihnen helfen, den Kontext des VBScript zu verstehen, damit Sie mir helfen können.

Im Grunde genommen sind alle Komponenten (VBScript, VBA-Makro und HTA) Teile eines Tools, das ich zur Automatisierung manueller Aufgaben erstelle. Es geht so ziemlich so:

A - HTA

~~~~~~~~~~~~

Der Benutzer wählt einige Dateien aus der HTA / GUI aus.Im HTML der HTA gibt es einige VBScript innerhalb der "SCRIPT" -Tags, die die 4 Eingabedateien des Benutzers als Argumente an ein VBScript übergeben (ausgeführt von WScript.exe - zur Verdeutlichung wird hier auf Anmerkung 1 verwiesen).Das Skript können Sie es aufrufenmyScript.vbs Von nun an werden die 4 Argumente verarbeitet, von denen 3 bestimmte Dateien sind und das vierte ist ein Pfad / Ordner, in dem sich mehrere Dateien befinden (siehe auch Anmerkung 2 zur Klarheit).B - myScript.vbs

~~~~~~~~~~~~

myScript.vbs öffnet die ersten 3 Argumente, die Excel-Dateien sind. Eine davon ist eine * .xlsm-Datei mit meinem VBA-Makro.

myScript.vbs verwendet dann das vierte Argument, das ein PATH für einen Ordner ist, der mehrere Dateien enthält, und weist dies einer Variablen zu, die beim Aufrufen von GetFolder an ein FileSystemObject-Objekt übergeben werden soll, d. h.

<code>... 'Other code here, irrelevant for this post
Dim FSO, FLD, strFolder
... 'Other code here, irrelevant for this post
arg4 = args.Item(3)
strFolder = arg4
Set FSO = CreateObject("Scripting.FileSystemObject"
'Get a reference to the folder you want to search
Set FLD = FSO.GetFolder(strFolder)
...
</code>

Von hier aus erstelle ich eine Schleife, damit ich die Dateien im Ordner nacheinander öffnen und dann mein Makro ausführen kann, d. H.

<code>...
Dim strWB4, strMyMacro
strMyMacro = "Sheet1.my_macro_name"

'loop through the folder and get the file names
For Each Fil In FLD.Files

    Set x4WB = x1.Workbooks.Open(Fil)
x4WB.Application.Visible = True

x1.Run strMyMacro

x4WB.close
Next 
...
</code>

Bitte beachten Sie, dass wenn die ersten 3 Excel-Dateien geöffnet wurden (gesteuert durch Code vor der Schleife und hier nicht gezeigt, da ich mit diesem Teil kein Problem habe), ich sie offen halten muss.

Es sind die Dateien im Ordner (die als 4. Argument übergeben wurden), die nacheinander geöffnet und geschlossen werden müssen. Aber zwischen dem Öffnen und Schließen benötige ich das VBA / Makro (geschrieben in einer der 3 zuvor geöffneten Excel-Dateien)jedes Mal laufen Die Schleife iteriert und öffnet eine neue Datei aus dem Ordner (ich hoffe, Sie folgen - wenn nicht, lassen Sie es mich bitte wissen :)).

Das Problem, das ich habe, ist, dass die Dateien im Ordner n-mal geöffnet und geschlossen, geöffnet und geschlossen werden (n = Anzahl der Dateien im Ordner, natürlich), ohne auf die Ausführung des Makros zu warten. Das will ich nicht. Ich habe die Anweisung WScript.sleep mit einer Verzögerung von 10 Sekunden nach der Anweisung 'x1.Run strMyMacro' ausprobiert, aber ohne Erfolg.

Irgendwelche Ideen?

Danke, QF.

ANMERKUNGEN:

1 - Der Einfachheit halber ist dies wie folgt:

<code>    strCMD = cmd /c C:\windows\system32\wscript.exe myScript.vbs <arg1> <arg2> <arg3> <arg4>
    'FYI - This is run by creating a WShell object, wsObj, and using the .run method, i.e. WShell.run(strCMD)
</code>

2 Die HTA verwendet ein Stück JavaScript, das die vierte Eingabedatei des Benutzers entfernt (HTML: INPUT TYPE = "file") und diese an das VBScript innerhalb der HTA weiterleitet. Dies bringt mich um das Problem herum, dass ich nicht ausschließlich einen Ordner in HTML auswählen kann.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage