VBScript - Как заставить программу ждать, пока процесс не завершится?

У меня есть проблема в VBScript, который я использую с макросом VBA / Excel и HTA. Проблема только в VBScript, у меня есть два других компонента, то есть макрос VBA и интерфейс HTA, работающие отлично. Но прежде чем я объясню проблему, я думаю, что вы поможете мне, я должен помочь вам понять контекст VBScript.

Итак, в основном все компоненты (VBScript, VBA macro и HTA) являются частями инструмента, который я создаю для автоматизации некоторых ручных работ. Это выглядит примерно так:

A - HTA

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

User selects some files from the HTA/GUI. Within the HTML of the HTA there is some VBScript within the "SCRIPT" tags which passes the users 4 input files as arguments to a VBScript (executed by WScript.exe - you may refer to note #1 for clarity here) The script, lets call it myScript.vbs from now on then handles the 4 arguments, 3 of which are specific files and the 4th is a path/folder location that has multiple files in it - (also see note #2 for clarity) B - myScript.vbs

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

myScript.vbs opens up the first 3 arguments which are Excel files. One of them is a *.xlsm file that has my VBA macro.

myScript.vbs then uses the 4th argument which is a PATH to a folder that contains multiple files and assigns that to a variable for passing to a FileSystemObject object when calling GetFolder, i.e.

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

From here I create a loop so that I can sequentially open the files within the folder and then run my macro, i.e.

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

Обратите внимание, что когда первые 3 файла Excel открыты (контролируются кодом до цикла и не отображаются здесь, так как у меня нет проблем с этой частью), я должен оставить их открытыми.

Это файлы в папке (которые были переданы в качестве 4-го аргумента), которые должны последовательно открываться и закрываться. Но между открытием и закрытием мне требуется VBA / макрос (записано в одном из 3 ранее открытых файлов Excel)to run each time цикл повторяется и открывается новый файл из папки (надеюсь, вы последуете, если нет, дайте мне знать :)).

У меня проблема в том, что файлы в папке открываются и закрываются, открываются и закрываются, n раз (n = # файлов в папке, естественно), не дожидаясь запуска макроса. Это не то, что я хочу. Я пробовал оператор WScript.sleep с 10-секундной задержкой после «x1.Run strMyMacro». Скажите, но безрезультатно.

Есть идеи?

Спасибо, QF.

ЗАМЕТКИ:

1 - Для простоты / ясности это как:

<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 В HTA используется фрагмент JavaScript, который отбирает у пользователя четвертый входной файл (HTML: INPUT TYPE = & quot; file & quot;) и передает его в VBScript внутри HTA. Это позволяет мне решить проблему невозможности выбора FOLDER исключительно в HTML.

Ответы на вопрос(4)

Ваш ответ на вопрос