VBScript - Jak sprawić, by program poczekał, aż proces się zakończy?

Mam problem z VBScript, którego używam z makrem VBA / Excel i HTA. Problemem jest po prostu VBScript, mam dwa pozostałe komponenty, tj. Makro VBA i interfejs HTA działają idealnie. Ale zanim wyjaśnię problem, myślę, że aby mi pomóc, muszę pomóc ci zrozumieć kontekst VBScript.

Tak więc zasadniczo wszystkie komponenty (VBScript, makro VBA i HTA) są częścią narzędzia, które buduję, aby zautomatyzować niektóre prace ręczne. To wygląda tak:

A - HTA

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

Użytkownik wybiera niektóre pliki z HTA / GUI.W kodzie HTML aplikacji HTA znajduje się kilka znaczników VBScript w znacznikach „SCRIPT”, które przekazują użytkownikom 4 pliki wejściowe jako argumenty do VBScript (wykonanego przez WScript.exe - możesz tu przeczytać uwagę # 1)Skrypt, nazwijmy tomyScript.vbs od teraz obsługuje 4 argumenty, z których 3 są specyficznymi plikami, a czwarty jest lokalizacją ścieżki / folderu, w której znajduje się wiele plików - (patrz także uwaga # 2 dla jasności)B - myScript.vbs

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

myScript.vbs otwiera pierwsze 3 argumenty, które są plikami Excel. Jednym z nich jest plik * .xlsm, który ma moje makro VBA.

myScript.vbs używa wtedy czwartego argumentu, który jest PATH do folderu, który zawiera wiele plików i przypisuje go do zmiennej w celu przekazania do obiektu FileSystemObject podczas wywoływania GetFolder, tj.

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

Od tego momentu tworzę pętlę, dzięki której mogę kolejno otwierać pliki w folderze, a następnie uruchamiać moje makro, tj.

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

Pamiętaj, że gdy pierwsze 3 pliki Excela zostaną otwarte (kontrolowane kodem przed pętlą i nie są tutaj pokazane, ponieważ nie mam z tym problemu), muszę je otworzyć.

Są to pliki w folderze (który został przekazany jako czwarty argument), które muszą kolejno otwierać i zamykać. Ale między otwarciem a zamknięciem wymagam VBA / makro (napisany w jednym z 3 wcześniej otwartych plików Excel)biegać za każdym razem pętla iteruje i otwiera nowy plik z folderu (mam nadzieję, że podążasz - jeśli nie, daj mi znać :)).

Problem polega na tym, że pliki w folderze otwierają się i zamykają, otwierają i zamykają, n razy (naturalnie n = # plików w folderze), nie czekając na uruchomienie makra. To nie jest to, czego chcę. Próbowałem instrukcji WScript.sleep z 10 sekundowym opóźnieniem po instrukcji „x1.Run strMyMacro”, ale bezskutecznie.

Jakieś pomysły?

Dzięki, QF.

UWAGI:

1 - Dla uproszczenia / jasności tak:

<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 wykorzystuje fragment JavaScript, który usuwa 4. plik wejściowy użytkowników (HTML: INPUT TYPE = "plik") i przekazuje go do VBScript w HTA. Sprawia to, że nie mogę wybrać wyłącznie FOLDERU w HTML.

questionAnswers(4)

yourAnswerToTheQuestion