0

My latest attempt to solve my problems when calling a .exe with an input argument from Excel-VBA uses this script:

Sub RunProgram()
    Dim wsh As Object
    Set wsh = VBA.CreateObject("WScript.Shell")
    ChDir "\\path\folder1\folder2\"
    StartExeWithArgument
 ......
 End Sub

Public Sub StartExeWithArgument()
Dim strProgramName As String
Dim strArgument As String
strProgramName = "program.exe "
strArgument = "datafile.gdp"
Call Shell("""" & strProgramName & """ """ & strArgument & """", vbNormalFocus)
End Sub

The path I set as the working directory is the working directory of the .exe program, and the location of the input file datafile.gdp. However, this current script calls the .exe without loading the argument file and the calculations the .exe is supposed to run do not occur. Instead the .exe launches to its main page as though I clicked a desktop shortcut to start a new project. When loaded correctly, the .gdp file should cause the calculation to initiate and run in the background without ever appearing to the user.

If I change the path of the input file to:

strArgument = "\\path\folder1\folder2\datafile.gdp"

But keep everything else the same, the .exe launches and calculates automatically, but wants to write files in the following duplicated directory, (all prefixed with the name of the input file):

\\path\folder1\folder2\PATH\FOLDER1\FOLDER2\

If I create the file path for it to operate in everything operates as it should, BUT the path is actually 6 folders deep in reality and this is all being duplicated, meaning the files are too deep to be backed up on our system. So I need to launch the program and have it operating without this duplication of the directory. It works fine when not launched from this VBA script, and worked fine before the .exe was updated by an external company.

  • Why can the Call Shell command find the .exe without a path, but I need to provide a path for the argument?
  • strArgument = ... requires a path to find the argument file, despite the file being in the current directory, providing the path seems to pass a duplicated path to the .exe causing it to crash if I don't create the folders representing the duplicated directory so it can operate within them. Is there something very basic I am missing regarding directories?

My previous up-voted but unanswered question here provides more context.

Petrichor
  • 975
  • 1
  • 9
  • 22
  • The .exe may be part of your PATH environment variable so is found that way? – QHarr Dec 11 '17 at 14:29
  • If true, the SetCurrentDirectory/ChDir/ws.CurrentDirectory is having no impact on calling the .exe file, which seems odd to me as a noob. (I have tried all of these methods to change the directory from which VBA is finding my files, with no success). I have tried printing all of the environment variables directly before calling the .exe, and none of them seem to be the working directory of the .exe, although I am not convinced I have printed all of them, working on that now. And the path of the .exe and the path of the .gdp are the same anyway, so why wouldn't they both be found? – Petrichor Dec 11 '17 at 15:32

0 Answers0