所以我创建了一个使用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,但是不需要参数,只需单击并运行。
答案 0 :(得分:3)
shell命令正在正确执行。 exe
启动,然后在当前路径中查找.xlsm
文件。发生的事情是,它无法在当前目录中找到TLSolver.xlsm
,因此错误IOError: [Errno 2] No such file or directory: 'TLSolver.xlsm'
在这种情况下有三个建议。
使用ChDir
将VBA中的目录更改为excel文件所在的目录,然后启动exe OR
将两个文件放在同一目录中。 或强>
重写python exe代码( 这不符合我的专业知识,因此无法帮助您 )提示用户选择excel文件
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