Ошибка Excel VB в QTP 11

Я написал скрипт в Excel VBA, и он работает нормально, теперь я пытаюсь скрывать то же самое с QTP 11.0 – однако перед вами стоит какая-то проблема.


Обновленный вопрос, основанный на предположении Xiaofu –

Что эквивалентно функции оболочки VBA в QTP 11?

Ниже приведен сценарий QTP 11 :

Extern.Declare micHwnd, "OpenProcess", "kernel32", "OpenProcess", micLong, micLong, micLong Extern.Declare micHwnd, "WaitForSingleObject", "kernel32", "WaitForSingleObject", micLong, micLong Extern.Declare micHwnd, "CloseHandle", "kernel32", "CloseHandle", micLong Const PROCESS_QUERY_INFORMATION = &H400 Const SYNCHRONIZE = &H100000 Const SWP_NOMOVE = 2 Const SWP_NOSIZE = 1 Const HWND_TOPMOST = -1 Const HWND_NOTOPMOST = -2 Const STATUS_PENDING = &H103 Const STILL_ACTIVE = &H103 Const WAIT_TIMEOUT = &H102 Const INFINITE = &HFFFFFFFF Public Function test_exe() Dim argStr argStr = "cmd.exe /c " + Chr(34) & "plink.exe -load " + Chr(34) + session_name + Chr(34) + " -l " + Chr(34) + login_id + Chr(34) + " -pw " + Chr(34) + dns_pwd + Chr(34) + " -m " + Chr(34) + cmd_dir + "commands.txt" + Chr(34) + " >> " + Chr(34) + log_dir & log_filename + Chr(34) + Chr(34) exeCount = Run_Test(argStr, log_dir + log_filename) End Function Public Function Run_Test(exeStr, ByVal logFile) Dim pid, ExitEvent Dim lineStr Dim okFlg Dim hProcess exeCount = "0" okFlg = 0 pid = shell(exeStr, vbHide) hProcess = Extern.OpenProcess(PROCESS_QUERY_INFORMATION + SYNCHRONIZE, 0, pid) ExitEvent = Extern.WaitForSingleObject(hProcess, 15000) Extern.CloseHandle(hProcess) Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile(logFile, ForWriting, True) Do f.writeLine lineStr If InStr(1, lineStr, "/home/") > 0 Then okFlg = okFlg + 1 exeCount = "1" Loop Until EOF(3) f.close If okFlg >= 1 Then Run_Test = okFlg Else Run_Test = -1 End If End Function 

Ошибка, которую я получаю, находится в строке " **pid = shell(exeStr, vbHide)** " – " Объект не поддерживает это свойство или метод: 'shell' "

Любое предложение о том, как решить эту проблему?

Я бы предложил вам использовать DotNetFactory для доступа ко всем этим хорошим требованиям .NET:

 Dim csProcess Set csProcess = DotNetFactory.CreateInstance("System.Diagnostics.Process") Dim myProcess Set myProcess = csProcess.Start("notepad.exe") MsgBox myProcess.Id 

Если вы не знакомы с документами MSDN или не имеете доступа к нему, вот пример с аргументами командной строки:

 Dim SystemProcess Set SystemProcess = DotNetFactory.CreateInstance("System.Diagnostics.Process") Dim processStartInfo Set processStartInfo = DotNetFactory.CreateInstance("System.Diagnostics.ProcessStartInfo") processStartInfo.FileName = "cmd.exe" processStartInfo.Arguments = "/c notepad.exe" Dim myProcess Set myProcess = SystemProcess.Start(processStartInfo) msgbox myProcess.Id 
  • В R, открыв объект, сохраненный в Excel, через shell.exec
  • Командная оболочка Excel VBA для поиска Chrome
  • Понимание возвращаемого значения из функции оболочки
  • Excel VBA Подождите, пока Shell закончит работу, прежде чем продолжить сценарий
  • Экспорт в Excel из оболочки django
  • Как сохранить вывод нескольких запросов mysql в двух разных листах Excel?
  • Переместите каждое x (динамическое) количество строк в одну строку
  • Объявить функцию Excel Vba с помощью shell32.dll
  • Удалить все файлы с расширением .c с помощью команды shell в vba
  • VBA, чтобы найти дату установки и дату Bios для удаленных компьютеров
  • Excel VBA запускает команду оболочки на Mac?
  • Давайте будем гением компьютера.