【问题标题】:How do i run a .exe file with file creation?如何通过文件创建运行 .exe 文件?
【发布时间】: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 文件将被创建在哪里。

标签: excel vba


【解决方案1】:

你的文件是在当前目录下创建的,你可以通过函数获取它的路径:CurDir()你可以通过调用SetCurrentDirectory函数来改变当前目录:

Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long
Sub Button8_Click()
    MsgBox ("Old Dir = " & CurDir())
    SetCurrentDirectory ActiveWorkbook.path
    MsgBox ("Current Dir = " & CurDir())
    Dim path As String
    path = ActiveWorkbook.path

    path = path + "\Voltage Recording.exe"
    MsgBox (path)
    retval = Shell(path, vbNormalFocus)

End Sub

【讨论】:

  • @Deckdyl:我修改了答案以显示文件的路径,检查它是否存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-06
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
相关资源
最近更新 更多