Как передать статус из VBA в VBScript в окно bat

У меня есть файл .bat, который последовательно вызывает ряд процессов.

Одним из них является VBScript, который используется для вызова электронной таблицы, например

wscript %VBScript% %spreadsheet%

Этот VBscript открывает файл Excel, запускает некоторые макросы, сохраняет файл Excel и завершает работу. Грубо говоря, VBScript

CreateObject("Excel.Application")
Workbooks.Open(spreadsheet)
Run(macro)
Save
Quit

Как передать сообщение из VBA (прогресс макроса) через VBScript и обратно в окно bat?


person orange90    schedule 07.07.2021    source источник
comment
Вторая часть, вероятно, stackoverflow.com/a/33651565/11683, первая часть может быть сложнее.   -  person GSerg    schedule 08.07.2021
comment
Здесь вы используете три языка сценариев: VBScript, CMD, VBA. Если вам нужен какой-то пользовательский интерфейс, я предлагаю вам перенести все это в VBA, а не пытаться объединить три несовместимые платформы.   -  person Nick.McDermaid    schedule 08.07.2021
comment
Файл bat вызывает несколько разных процессов, использующих разные языки. К сожалению, перенос всего в VBA невозможен. Кроме того, использование VBScript означает, что все выполняется скрыто в фоновом режиме.   -  person orange90    schedule 08.07.2021
comment
Самое близкое, что я могу придумать, это если вы отдельно создадите и зарегистрируете на компьютере простой COM-объект, который предоставляет простое событие Progress и метод ReportProgress, который его вызывает. Затем вы сможете использовать Wscript.CreateObject для создания этого объекта таким образом, чтобы vbscript мог обрабатывать его события. Затем у вас будет процедура обработчика в vbscript, и вы научите свой макрос Excel также принимать экземпляр этого COM-объекта в качестве аргумента и вызывать ReportProgress в соответствующее время. (продолжение...)   -  person GSerg    schedule 08.07.2021
comment
... Вы не можете сделать это только с помощью Excel, потому что создаваемые им COM-классы являются PublicNonCreatable, они не зарегистрированы на компьютере, и Wscript.CreateObject не может их создавать. После всего этого вы применяете stackoverflow.com /questions/18216027/ из процедуры обработки событий в vbscript.   -  person GSerg    schedule 08.07.2021
comment
Кто-то пометил этот вопрос как дубликат этого вопроса /18216027/ Это абсолютно не отвечает на вопрос. Кто-нибудь может открыть пост заново?   -  person orange90    schedule 08.07.2021
comment
@orange90 В чем вопрос, потому что, честно говоря, это не так просто понять? Вы хотите показать прогресс или передать прогресс из макроса VBA в VBScript? Здесь просто нет достаточной информации, чтобы советовать в любом случае.   -  person user692942    schedule 08.07.2021
comment
@user692942 user692942 Я думаю, из первого и последнего предложения вопроса довольно ясно, что у OP есть файл .bat, который запускает файл vbscript, который запускает макрос VBA. Макрос VBA должен сообщать о своем прогрессе в файл vbscript, чтобы он мог сообщить об этом окну cmd, которое запустило файл .bat, чтобы его можно было отобразить пользователю.   -  person GSerg    schedule 08.07.2021
comment
@GSerg хорошо, но как выглядит макрос? Что они хотят вернуть из макроса в VBScript? Кажется важными моментами, которые не охвачены текущим вопросом.   -  person user692942    schedule 08.07.2021
comment
@user692942 user692942 Им нужен отчет о ходе выполнения макроса, а не возвращаемое значение (пожалуйста, отзовите свой закрытый голос). 10% завершено. 20% завершено и т. д., меняется в реальном времени по мере выполнения макроса. Неважно, что он возвращает в конце.   -  person GSerg    schedule 08.07.2021
comment
@GSerg хорошо, что вы можете сформулировать это для них, вместо того, чтобы быть ясным в вопросе.   -  person user692942    schedule 08.07.2021
comment
Спасибо GSerg, это точно. user692942, я не уверен, почему содержание макроса меняет контекст вопроса. Это все равно был бы тот же вопрос, даже если бы я просто хотел сказать yabba dabba doo   -  person orange90    schedule 08.07.2021