从VBA运行command.com或cmd.exe导致MSG命令

时间:2016-08-10 14:39:29

标签: windows vba cmd

当我从VBA中打开命令提示符时,我无法使msg工作,但是已经证明它在启动cmd.exe或"命令提示符"时有效。来自windows。

我的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打开命令提示符或cmd.exe,然后键入" msg"我得到了如何使用msg语法的提示。

那么,如何从vba访问命令提示符的这种可用性呢?此外,为什么命令会有所不同,具体取决于cmd.exe的启动方式?

1 个答案:

答案 0 :(得分:1)

问题在于64位Windows指向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