当我从vba中打开命令提示符时,无法让msg工作,但是已经证明它在从windows启动cmd.exe或“command prompt”时工作。
我的VBA代码如下:

Sub test()
Dim str_to_pass As String

str_to_pass = "msg"

Call Shell("cmd.exe /s /k " & str_to_pass, vbNormalFocus)

End Sub

我从内部命令提示符得到的结果:“msg”不被识别为内部或外部命令,…”
但是,如果我先从windows打开command prompt或cmd.exe,然后键入“msg”,我会得到如何使用msg语法的提示。
那么,我如何从vba访问命令提示符的可用性,而且,为什么命令会因启动cmd.exe的方式而不同?

最佳答案

问题在于64位Windows将调用定向到32位应用程序和从32位应用程序发出调用的方式。Windows有一个名为SysNative文件夹的虚拟文件夹,当从32位应用程序访问64位可执行文件时,需要使用该文件夹来代替System32。这里有一个很好的解释:http://www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm
代码必须是:

str_to_pass = "c:\windows\sysnative\msg"
Call Shell("cmd.exe /s /k " & str_to_pass, vbNormalFocus)

下面是相关的MSDN页面:https://msdn.microsoft.com/en-us/library/aa384187%28v=vs.85%29.aspx

07-24 09:44
查看更多