2014-11-05 2 views
1

Я запускаю макрос VBA из Word 2013. Я пытаюсь запустить исполняемый файл, для которого требуется параметр/параметр имени файла. Например, c: \ myfilefilter.exe filetobefiltered.htm Я хотел бы использовать Shell Run, потому что я хочу, чтобы код VBA дождался завершения исполняемого файла до возобновления кода VBA. Последние три строки в приведенном ниже коде являются примерами некоторых синтаксисов, которые я пробовал, которые не работают. Я думаю, что проблема заключается в пространстве между исполняемой программой и фильтром. Кто-нибудь знает правильный синтаксис или способ дождаться завершения исполняемой программы. Если вам нужна дополнительная информация, спросите пожалуйста.vba WScript.Shell запустить .exe файл с параметром

Dim wsh As Object 
Set wsh = VBA.CreateObject("WScript.Shell") 
Dim waitOnReturn As Boolean: waitOnReturn = True 
Dim windowStyle As Integer: windowStyle = 1 
Dim errorCode As Integer 
Dim strProgramName As String 
Dim strMyFile As String 
Call Shell("""" & strProgramName & """ """ & strMyFile & """", vbNormalFocus, waitOnReturn""") 
wsh.Run(strProgramName & """ """ & fileToFilterB & """", vbNormalFocus, waitOnReturn") 
wsh.Run "Chr(34)strProgramNameChr(34)strMyFile", waitOnReturn 

==================== Код ниже работ. после strCMD первый номер один представляет собой логический toogle 1 показывает окно dos и 0 скрывает поле dos, второе число похоже, 1 ждет завершения программы, прежде чем продолжить код VBA, 0 не ждет.

strCMD = sMyProgram + " " + sMyFile 
Dim wsh As Object 
Set wsh = VBA.CreateObject("WScript.Shell") 
wsh.Run strCMD, 1, 1 
+0

Я не знаю ответа, и не имеют хороший способ проверить, но в последней строке вы должны удалить все кавычки и присоединиться Chr (34) и ваши переменные с амперсандами. Я предполагаю, что вы определяете всю эту переменную где-то? – Christina

ответ

2

Вы могли бы попробовать это. Работает на меня.

Const BatchFileName = "P:\Export.bat" 

Dim WSH As Object

Set wsh = VBA.CreateObject("WScript.Shell") 
Dim waitOnReturn As Boolean: waitOnReturn = True 
Dim windowStyle As Integer: windowStyle = 1 

wsh.Run BatchFileName, windowStyle, waitOnReturn 

Kill BatchFileName 
1

это работает для меня (с MSACCESS 2013 VBA)

Dim wShell As New WshShell 
Dim wsExec As WshExec 
    Dim cmdline As String 
    cmdline = "notepad c:\somefile.txt" 
    Debug.Print Now, cmdline 
    Set wsExec = wShell.Exec(cmdline) 
    Do While wsExec.Status = 0 
     DoEvents 
    Loop 
    Debug.Print Now, "done" 
Смежные вопросы