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.