(Shell Function)VBA中是否需要文件路径?

时间:2012-01-07 22:35:00

标签: excel shell excel-vba vba

我有一个Matlab生成的可执行文件, Myfile.exe 可以从拨打电话。我学会了(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文件,相同的文件夹,相同的一切,它给出了“无法启动应用程序”错误消息!!

  1. 即使我将所有内容都放在一个文件夹中,是否也无法删除文件路径?
  2. 为什么它有时会起作用,有时候不行?
  3. 是否绝对强制添加文件路径?

2 个答案:

答案 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)

当您进一步询问不同的目录时,请注意您可以

  1. 根据我之前对您的问题的评论使用ChDir
  2. 使用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