使用VBA运行.exe

时间:2014-11-25 20:11:59

标签: python excel excel-vba exe vba

所以我创建了一个使用VBA(TLSolver.xlsm)运行的.exe文件(tlsolver.exe)。当我启动.exe时,它运行一些计算,吐出一个csv文件,然后我使用VBA将这些数据复制到我的Excel工作表上。

这是我正在使用的VBA代码:

Public Sub StartExeWithArgument()
    Dim strProgramName As String

    ActiveWorkbook.Save
    strProgramName = "C:\Users\My.Name\Desktop\Python\Tagless\tlsolver.exe"

    Call Shell("""" & strProgramName & """", vbNormalFocus)
End Sub

当我运行宏时,控制台窗口会弹出,然后快速关闭。我在关闭之前设法看到了这个错误:

IOError: [Errno 2] No such file or directory: 'TLSolver.xlsm'

我知道.exe定期双击文件时效果非常好,所以我倾向于认为我在VBA中搞砸了一些傻事。

任何帮助表示赞赏!

编辑:我知道sub被标记为StartExeWithArgument,但是不需要参数,只需单击并运行。

1 个答案:

答案 0 :(得分:3)

shell命令正在正确执行。 exe启动,然后在当前路径中查找.xlsm文件。发生的事情是,它无法在当前目录中找到TLSolver.xlsm,因此错误IOError: [Errno 2] No such file or directory: 'TLSolver.xlsm'

在这种情况下有三个建议。

  1. 使用ChDir将VBA中的目录更改为excel文件所在的目录,然后启动exe OR

  2. 将两个文件放在同一目录中。

  3. 重写python exe代码( 这不符合我的专业知识,因此无法帮助您 )提示用户选择excel文件

  4. VBA PART(建议1)

    Public Sub StartExeWithArgument()
        Dim strProgramName As String
        Dim xlFilePath As String
    
        '~~> Path of the excel file. Change as applicable
        xlFilePath = "C:\Temp"
    
        ActiveWorkbook.Save
    
        '~~> Change directory
        ChDir xlFilePath
    
        strProgramName = "C:\Users\My.Name\Desktop\Python\Tagless\tlsolver.exe"
    
        Call Shell("""" & strProgramName & """", vbNormalFocus)
    End Sub