2015-08-28 3 views
2

Я ищу, чтобы преобразовать VBScript в VBA и запустить его из модуля Excel. В прошлом я перевел VB на эквивалент VBA, но на этот раз у меня небольшие проблемы. Я сделал несколько попыток (возможно, много попыток) попытаться перевести это сам без успеха.Перевод сценария VBS на VBA и выполнение через Excel

Я искал Google, стек и другие форумы, которые я нашел в Google, и не имел большого успеха в некоторых примерах, которые я нашел.

Возможно ли выполнить нижеследующее из модуля Excel? (Как замечание, я пытаюсь напрямую взаимодействовать с приложением. У меня есть другие модули вне этого скрипта, которые делают это только с помощью OLE Automation и ссылаются на соответствующие ссылки COM/библиотеки). Однако в приложении отсутствует обширная документация, а методы и свойства, доступные мне через указанные DLL, довольно ограничены.

И так, это мое обходное решение (хотя и не предпочтительное), как это ни ужасно, как кажется. В настоящее время у меня есть BAT-файл, который запускает VBScript, и он отлично работает. Теперь мне просто нужно запустить код из модуля. Я попытался вставить скрипт в качестве объекта и запустить макрос, который выполняет его из Excel, но я получаю подсказки безопасности (и это не весело).

Любая помощь очень ценится!

Set WshShell = WScript.CreateObject("WScript.Shell") 
WScript.Sleep 1000 
WshShell.AppActivate "Average Terminal Emulator" 
WScript.Sleep 1000 
WshShell.SendKeys "%" 
WshShell.SendKeys "I" 
WshShell.SendKeys "Y" 
WshShell.SendKeys "S" 
WScript.Sleep 1000 
WshShell.AppActivate "Average Terminal Emulator" 
WScript.Sleep 1000 
WshShell.SendKeys "0" 
WshShell.SendKeys "{TAB}" 
WshShell.SendKeys "M" 
WshShell.SendKeys "{TAB}" 
WshShell.SendKeys "C" 
WshShell.SendKeys "{TAB}" 
WScript.Sleep 1000 
WshShell.SendKeys "{ENTER}" 

ответ

3

SendKeys() и AppActivate() являются родными для VBA, так что вы можете удалить все WshShell вещи, в том числе CreateObject() вызова для его создания.

Тогда просто замените каждый экземпляр:

WScript.Sleep 1000 

с:

Application.Wait Now() + TimeValue("00:00:01") 

и вы должны быть хорошо.

+0

Я использовал 'SenKeys' в прошлом, и просто примечание - OP, возможно, потребуется добавить пару« Application.Wait »между некоторыми из них. Я заметил, что, поскольку Excel работает через макрос так быстро, как может, иногда программа, которую манипулирует 'SendKeys', не может идти в ногу. – BruceWayne

+0

@BruceWayne - Это хороший момент. 'SendKeys' почти никогда не является лучшим решением, поэтому, если вы собираетесь его использовать, вам нужно будет сыграть с ним и настроить время ожидания между нажатиями клавиш. – Bond

+0

Согласен - при запуске моего макроса 'SendKeys', я даже не * смотрю * на компьютере, когда запускаю' SendKeys', потому что он настолько искушен. – BruceWayne

Смежные вопросы