Нужен ли путь к файлу в (Shell Function) VBA? - PullRequest
2 голосов
/ 08 января 2012

У меня есть сгенерированный Matlab исполняемый файл, Myfile.exe для вызова из . Я узнал (Shell Function) это то, что мне нужно использовать.

Я не хочу включать полный путь к файлу, так как я не хочу ограничивать пользователя определенной папкой в ​​определенном месте на каждом компьютере.

У меня есть следующий код для вызова исполняемого файла, который отлично работает:

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 в ту же папку (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, ту же папку, все то же самое, он выдает ошибку «Не удается запустить приложение» msg !!

  1. Разве нельзя удалить путь к файлу, даже если у меня все в одной папке?
  2. Почему это иногда работает, иногда нет?
  3. Обязательно ли добавление пути к файлу?

Ответы [ 2 ]

1 голос
/ 10 января 2012

Поскольку у вас есть дополнительные вопросы о различных каталогах, обратите внимание, что вы можете либо

  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
    
1 голос
/ 08 января 2012

Когда вы запускаете подобную оболочку без указания пути, она запускается из 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...