У меня есть фиксированная команда, которую мне нужно передать в командную строку с помощью VBA, а затем выполнить команду. например "perl a.pl c:\temp"
следующая - это команда, которую я пытаюсь использовать, но она просто открывает командную строку и не запускает команду.
Call Shell("cmd.exe -s:" & "perl a.pl c:\temp", vbNormalFocus)
Пожалуйста, проверьте.
Параметр S ничего не делает сам по себе.
/S Modifies the treatment of string after /C or /K (see below)
/C Carries out the command specified by string and then terminates
/K Carries out the command specified by string but remains
Попробуйте что-то вроде этого
Call Shell("cmd.exe /S /K" & "perl a.pl c:\temp", vbNormalFocus)
Вам может даже не понадобиться добавить "cmd.exe" в эту команду, если вы не хотите, чтобы окно команды открывалось, когда оно запускается. Shell должна выполнить команду самостоятельно.
Shell("perl a.pl c:\temp")
-Edit -
Чтобы дождаться завершения команды, вам нужно будет сделать что-то вроде шоу @Nate Hekman в своем ответе здесь
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1
wsh.Run "cmd.exe /S /C perl a.pl c:\temp", windowStyle, waitOnReturn