如何使用 vba 的 shell() 运行带有参数的 .exe?
Posted
技术标签:
【中文标题】如何使用 vba 的 shell() 运行带有参数的 .exe?【英文标题】:How do you run a .exe with parameters using vba's shell()? 【发布时间】:2014-01-21 22:21:58 【问题描述】:我有一个目标文件路径,其结构类似于下面的示例。
C:\Program Files\Test\foobar.exe /G
我需要做的是能够使用 VBA 的shell()
命令来执行这个文件。
如何格式化文件路径以告诉 Shell()
有一个参数需要在运行 .exe 时调用
我已阅读/尝试过的内容(无济于事)在下方,结果在右侧。
file = """C:\Program Files\Test\foobar.exe"" /G" <---Bad file name or number (Error 52)
shell(file)
file2 = "C:\Program Files\Test\foobar.exe /G" <---file never found
shell(file2)
我已经使用 shell() 成功运行了其他 .exe,所以我知道这不是 VBA 或函数的问题。
例子:
works = "C:\Program Files\Test\test.exe"
shell(works)
我对执行需要额外参数的文件所涉及的过程不是特别熟悉,所以如果我说错了或者您需要更多信息,请告诉我。
【问题讨论】:
这应该可以。但是,作为一种解决方法,您可以使用您创建然后执行的批处理文件。 @Olaf。以上两个例子都应该有效吗? 【参考方案1】:以下是一些如何在 VBA 中使用 Shell 的示例。 在 Chrome 中打开 ***。
Call Shell("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" & _
" -url" & " " & "www.***.com",vbMaximizedFocus)
打开一些文本文件。
Call Shell ("notepad C:\Users\user\Desktop\temp\TEST.txt")
打开一些应用程序。
Call Shell("C:\Temp\TestApplication.exe",vbNormalFocus)
希望这会有所帮助!
【讨论】:
请问vbMaximizedFocus vs. vbNormalizedFocus 的意义何在?另外,如何处理与文件一起调用的参数? 这只是决定您是否希望程序在最大化窗口或正常大小的窗口中打开。关于参数,我只是认为您会这样做:Shell (C:\SomeApplication argument1 argument 2)。还有一个 ShellExecute 函数可以为您的调用提供更多选项。【参考方案2】:这对我有用(Excel 2013):
Public Sub StartExeWithArgument()
Dim strProgramName As String
Dim strArgument As String
strProgramName = "C:\Program Files\Test\foobar.exe"
strArgument = "/G"
Call Shell("""" & strProgramName & """ """ & strArgument & """", vbNormalFocus)
End Sub
灵感来自https://***.com/a/3448682。
【讨论】:
这可能也很有趣:Run Associated Program. 干得好,我在转义双引号周围有点困难。你能详细说明一下吗?我知道你必须在双引号前面加上一对双引号来转义它们,所以在中间添加空格我得到......但我没有得到开始和结束。我知道Shell函数必须传递一个字符串,并且在变量前面放置双引号会导致变量被视为字符串......但是为什么要使用4组双引号? @KevinScharnhorst 开头(和结尾)的 4 个引号表示“带有一个引号的字符串”,与号 2 和 3 之间的引号表示“带有两个引号和中间的空格字符的字符串'。这意味着使用 '"C:\Program Files\Test\foobar.exe" "/G"' (不带单引号)调用 Shell 函数。 这不行:"C:\Windows\System32\cacls.exe" "C:\Program Files (x86)\software foo\DataBase\DataBase.mdb" "/e /p Benutzer :F" 有什么想法吗? @user3305711 确保它首先在命令窗口中运行。尝试不同的引用变体,例如 "C:\Windows\System32\cacls.exe" ""C:\Program Files (x86)\software foo\DataBase\DataBase.mdb" /e /p Benutzer:F"跨度> 【参考方案3】:以下代码将帮助您从 excel 中自动打开 .exe 文件...
Sub Auto_Open()
Dim x As Variant
Dim Path As String
' Set the Path variable equal to the path of your program's installation
Path = "C:\Program Files\GameTop.com\Alien Shooter\game.exe"
x = Shell(Path, vbNormalFocus)
End Sub
【讨论】:
【参考方案4】:sTempBAT = "d:\tempLog.txt"
Set shellwindows = GetObject("new:9ba05972-f6a8-11cf-a442-00a0c90a8f39")
Set itemobj = shellwindows.Item()
itemobj.document.Application.ShellExecute sTempBAT, "", "", "open", 0
调用shell函数的另一种方法 https://blog.sevagas.com/IMG/pdf/bypass_windows_defender_attack_surface_reduction.pdf
【讨论】:
以上是关于如何使用 vba 的 shell() 运行带有参数的 .exe?的主要内容,如果未能解决你的问题,请参考以下文章
VBA:运行“提升”命令(Shell 与 ShellExecute)