У меня проблема в VBScript, который я использую с макросом VBA/Excel и HTA. . Проблема только в VBScript, у меня есть два других компонента, то есть макрос VBA и интерфейс HTA, которые работают отлично. Но прежде чем я объясню проблему, я думаю, что для того, чтобы вы мне помогли, я должен помочь вам понять контекст VBScript.
Таким образом, практически все компоненты (VBScript, макрос VBA и HTA) являются частями инструмента, который я создаю для автоматизации некоторых рутинных операций. Это выглядит примерно так:
~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Затем myScript.vbs использует 4-й аргумент, который представляет собой ПУТЬ к папке, содержащей несколько файлов, и присваивает ее переменной для передачи объекту FileSystemObject при вызове GetFolder, т.е.
... 'Другой код здесь, неактуально для этого поста
Dim FSO, FLD, strFolder
... 'Другой код здесь, не относящийся к этому сообщению
arg4 = args.Item(3)
стрПапка = arg4
Установите FSO = CreateObject("Scripting.FileSystemObject"
'Получите ссылку на папку, которую вы хотите найти
Установить FLD = FSO.GetFolder(strFolder)
...
Отсюда я создаю цикл, чтобы последовательно открывать файлы в папке а затем запустить мой макрос, т.е.
...
Дим strWB4, strMyMacro
strMyMacro = "Лист1.my_macro_name"
'перебрать папку и получить имена файлов
Для каждого файла в FLD.Files
Установить x4WB = x1.Workbooks.Open(Fil)
x4WB.Application.Visible = Истина
x1.Выполнить strMyMacro
x4WB.закрыть
Следующий
...
Обратите внимание, что когда первые 3 файла Excel открыты (контролируются кодом до цикла и не показаны здесь, поскольку у меня нет проблем с этой частью), я должен держать их открытыми.
Именно файлы в папке (которая была передана в качестве 4-го аргумента) должны последовательно открываться и закрываться. Но между открытием и закрытием мне требуется, чтобы VBA/макрос (написанный в одном из трех ранее открытых файлов Excel) запускался каждый раз, когда повторяется цикл и открывает новый файл из папки (надеюсь, вы следуете - если нет, пожалуйста, дайте мне знать :)).
Проблема, с которой я сталкиваюсь, заключается в том, что файлы в папке открываются и закрываются, открываются и закрываются n раз (n = количество файлов в папке, естественно) без ожидания запуска макроса. Это не то, чего я хочу. Я пробовал оператор WScript.sleep с 10-секундной задержкой после оператора «x1.Run strMyMacro», но безрезультатно.
Есть идеи?
Спасибо, QF.
ПРИМЕЧАНИЯ:
1. Для простоты/ясности это делается следующим образом:
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)
2 HTA использует фрагмент JavaScript, который удаляет четвертый входной файл пользователя (HTML: INPUT TYPE="file") и передает его в VBScript в HTA. Это помогает мне обойти проблему невозможности исключительного выбора ПАПКИ в HTML.