我有一个Matlab生成的可执行文件, Myfile.exe 可以从excel-vba拨打电话。我学会了(Shell函数)是我需要使用的。
我不想包含整个文件路径,因为我不想将用户限制在每台计算机上某个位置的某个文件夹中。
我有以下代码来调用可执行文件,它可以正常工作:
Sub MyExe()
On Error Resume Next
Shell ("C:\Users\elwany\Desktop\Myfolder\Myfile.exe")
If Err <> 0 Then
MsgBox "Can't start the application.", vbCritical, "Error"
End If
End Sub
我的问题/问题是 我把可执行文件+带有VBA项目的Excel文件放在同一个文件夹(Myfolder)中,然后我将代码修改为:
Sub MyExe()
On Error Resume Next
Shell ("Myfile.exe")
If Err <> 0 Then
MsgBox "Can't start the application.", vbCritical, "Error"
End If
End Sub
有时它有效,有时却没有!
例如,昨天我运行了VBA代码,它运行了。今天我打开了相同的Excel文件,相同的文件夹,相同的一切,它给出了“无法启动应用程序”错误消息!!
答案 0 :(得分:1)
如果在没有指定路径的情况下运行这样的shell,它将从Active Directory运行。 Active Directory的内容取决于操作系统,而不是Excel / VBA(除非您明确设置)
试试这个
Sub MyExe()
On Error Resume Next
Shell (ThisWorkbook.Path & "\Myfile.exe")
If Err <> 0 Then
MsgBox "Can't start the application.", vbCritical, "Error"
End If
End Sub
答案 1 :(得分:1)
当您进一步询问不同的目录时,请注意您可以
ChDir
使用Dir
来验证myfile.exe
是否需要。此方法不需要错误处理来处理丢失的文件。
Sub TestB()
Dim strPath As String
strPath = Dir("c:\temp\myfile.exe")
If Len(strPath) > 0 Then
Shell strPath
Else
MsgBox "Path doesn't exist"
End If
End Sub
Sub TestA()
On Error Resume Next
'use the host workbook path
' ChDir ThisWorkbook.Path
'set path here
ChDir "C:\temp"
Shell ("Myfile.exe")
If Err <> 0 Then
MsgBox "Can't start the application.", vbCritical, "Error"
Else
MsgBox "sucess!", vbOKOnly
End If
End Sub