vba WScript.Shell运行带参数的.exe文件

时间:2014-11-05 16:46:46

标签: vba word-vba wsh

我正在从Word 2013运行VBA宏。我正在尝试运行一个需要文件名参数/参数的可执行文件。例如,c:\myfilefilter.exe filetobefiltered.htm

我想使用Shell Run,因为我希望VBA代码等到可执行文件运行完毕后才能恢复VBA代码。下面代码中的最后三行是我尝试过的一些不起作用的语法示例。我认为问题是可执行程序和它过滤的文件之间的空间。有没有人知道正确的语法或等待可执行程序完成的方法。如果您需要更多信息,请询问。

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之后,第一个数字是一个布尔参数: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

2 个答案:

答案 0 :(得分:7)

你可以试试这个。适合我。

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 :(得分:5)

这对我有用(来自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"