【发布时间】:2015-02-27 10:47:57
【问题描述】:
我如何在 excel VBA 中编程以运行外部程序,外部程序能够将收集到的数据输出到文件中?我的外部程序,voltage.exe,正常运行时(双击桌面屏幕上的程序)会将采集到的数据输出到文件data.txt中。但是,当使用下面的代码运行时,没有创建文件 data.txt。
Sub Button1_Click() ' run logger
Dim path As String
path = ActiveWorkbook.path
path = path + "\Voltage Recording.exe"
retval = Shell(path, vbNormalFocus)
End Sub
【问题讨论】:
-
认为您的程序将使用调用者的当前工作目录启动,在本例中为 Excell。我不确定 Shell 命令是否将 CWD 设置为工作簿路径,您可以使用
Shell("c:\windows\system32\cmd.exe", vbNormalFocus)查看 shell 从哪里开始并确认您的文件是在那里创建的。 -
Shell在返回之前不会等待被调用程序完成。 “data.txt”是否从未创建,或者只是在您的宏尝试读取它时没有创建? -
@TonyDallimore data.txt 从未被创建。
-
@Tensibai 我尝试了你的方法并且它有效,但是我无法使用 VBA 将命令输入到我调用的 cmd 以运行我的程序。
-
向其中发送内容的方法是
app = Shell("app",vbNormalFocus,1)(第三个参数中的1告诉Sheel等待)然后使用SendKeys "what to send"。但这个想法更多的是帮助您查看它从哪里开始命令以及您的文件可能是在哪里创建的。有关详细示例,请参阅this question。所以你可以改变目录,然后执行你的命令来确定你的 data.txt 文件将被创建在哪里。