2012-01-07 20 views
2

我有一个Matlab生成的可执行文件,Myfile.exe致电。我了解到(Shell函数)是我需要使用的。(Shell Function)VBA中是否需要文件路径?

我不想包含整个文件路径,因为我不想将用户限制到每台计算机上某个位置的某个文件夹。

我有以下代码调用可执行程序,它工作得很好:

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 

我的问题/问题是 我把可执行程序+ Excel的在同一个文件夹中的VBA项目文件(我的文件夹),然后我修改代码:

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. 添加文件路径绝对强制吗?
+0

对于未来的参考,你可以改变'ChDir'当前目录。所以'Shell(“Myfile.exe”)'之前的'ChrDir ThisWorkbook.Path'在这种情况下可以工作。 – brettdj 2012-01-08 02:07:41

回答

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 
    
+0

Brettdj,非常感谢您的意见!真的很感激它。 – 2012-01-10 20:22:56

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 
+0

谢谢克里斯,我明白你的意思了! 您的代码有效。 我们如何设置活动目录呢? – 2012-01-09 13:51:45