【发布时间】:2016-12-17 00:30:50
【问题描述】:
当我从 VBA 中打开命令提示符时,我无法让 msg 工作,但是已经证明它在从 Windows 启动 cmd.exe 或“命令提示符”时工作。
我的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 的启动方式而有所不同?
【问题讨论】:
-
更令人困惑的是,我创建了一段代码来创建 shell 命令的批处理文件,然后运行该 bat 文件而不是尝试调用 shell。它生成批处理文件,如果我从 VBA 外部打开它,批处理文件可以工作,但是当我从 vba 以编程方式打开批处理时,我得到与以前相同的结果。
-
在命令提示符处输入
where msg并将str_to_pass更改为它打印的完整路径名。 -
可能在 Windows\System32 中。那就是我的位置,输入 .exe 的完整路径仍然会产生相同的错误消息。 (我很生气我的老板让我做实际的工作,因为这是我今天想做的事情!)这是一个非常好的问题。
-
哦,顺便说一句,我确实注意到Shell打开的cmd窗口的环境变量与我手动打开的cmd窗口的环境变量不同。
-
我尝试了 where msg 建议,提供了相同的结果。从 vba 通过 shell 启动的 cmd 提示符内部,我无法访问 msg,即使使用完整路径名 c:\windows\system32\msg.exe