Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Running a Batch file from VBA

232 views
Skip to first unread message

D.riggins

unread,
May 27, 2009, 2:39:35 PM5/27/09
to
I am trying to run a batch file from Excell 2003 using the Shell function in
VBA and I can’t seem to get it to work. The code is like this:

RetVal = Shell(BatFilePath, vbNormalFocus)

Where BatFilePath is a string variable with the full path of the batch file
(e.g., D:\...\Batchfile.bat)

The line executes – I get a value in the RetVal variable and I see a brief
flash of the command prompt window, but I do not see the file that the batch
file is supposed to produce. A search of my hard drives indicates that the
results have not been created in some unexpected location.

The batch file works properly when run manually.

Jacob Skaria

unread,
May 27, 2009, 3:16:06 PM5/27/09
to
Dim strSheet as String
strSheet = Sheets("info").Range("F30")
Sheets(strSheet).Activate

OR

Dim strSheet as String
strSheet = Sheets("info").Range("F30")
Application.Goto Reference:=Sheets(strSheet).Range("A1")

--
If this post helps click Yes
---------------
Jacob Skaria


"Rick Rothstein" wrote:

> In older version of Windows (I thought this was changed in newer versions,
> but I haven't used Shell in ages, so I don't know for sure), you used to
> have to encase any path/filenames where either the path or filename
> contained internal spaces. You could try this and see if it works...
>
> RetVal = Shell("""" & BatFilePath & """", vbNormalFocus)
>
> Another possibility is that the briefly flashing command window is
> displaying an error message of some kind. I believe this line of code will
> leave the command window up so you can read its contents...
>
> RetVal = Shell(Environ$("comspec") & " /k " & """" & _
> BatFilePath & """", vbNormalFocus)
>
> --
> Rick (MVP - Excel)
>
>
> "D.riggins" <Drig...@discussions.microsoft.com> wrote in message
> news:0CF79E91-D12D-441D...@microsoft.com...

Rick Rothstein

unread,
May 27, 2009, 2:53:15 PM5/27/09
to
In older version of Windows (I thought this was changed in newer versions,
but I haven't used Shell in ages, so I don't know for sure), you used to
have to encase any path/filenames where either the path or filename
contained internal spaces. You could try this and see if it works...

RetVal = Shell("""" & BatFilePath & """", vbNormalFocus)

Another possibility is that the briefly flashing command window is
displaying an error message of some kind. I believe this line of code will
leave the command window up so you can read its contents...

RetVal = Shell(Environ$("comspec") & " /k " & """" & _
BatFilePath & """", vbNormalFocus)

--
Rick (MVP - Excel)


"D.riggins" <Drig...@discussions.microsoft.com> wrote in message
news:0CF79E91-D12D-441D...@microsoft.com...

Jacob Skaria

unread,
May 27, 2009, 3:27:02 PM5/27/09
to
Oops ..the below is a wrong post; please ignore..

--
If this post helps click Yes
---------------
Jacob Skaria

Steve Yandl

unread,
May 27, 2009, 3:48:33 PM5/27/09
to
Keep in mind, a batch file isn't an executable file. When run from a
console (dos type) window or in the context of the Windows operating system
environment, it is "hosted" by either cmd.exe or command.com. The Shell
function doesn't check the Windows registry to determine the program needed
to launch a file with the extension "bat". The solution is to use the Shell
function to start either cmd.exe or command.com (or use %comspec% for more
versatility as in Rick's response earlier) and then present the full path to
your batch file as the argument to %comspec%.


Steve Yandl

"D.riggins" <Drig...@discussions.microsoft.com> wrote in message
news:0CF79E91-D12D-441D...@microsoft.com...

>I am trying to run a batch file from Excell 2003 using the Shell function
>in
> VBA and I can't seem to get it to work. The code is like this:
>
> RetVal = Shell(BatFilePath, vbNormalFocus)
>
> Where BatFilePath is a string variable with the full path of the batch
> file
> (e.g., D:\...\Batchfile.bat)
>

> The line executes - I get a value in the RetVal variable and I see a brief

D.riggins

unread,
May 27, 2009, 6:23:02 PM5/27/09
to
Thanks. Having the command window stay open helped. The command window was,
in fact showing an error message. It turns out that the batch file was being
executed at the root of the D:\ drive and not in the subdirectory of the D
drive where the batch file is stored. As a result the batch file could not
find the other files it was supposed to process (the batch file simply
concatenates several MP3 files located in the same directory as the batch
file using the copy command).

For now I've taken the brute force approach and changed the batch file so it
explicitly changes the directory before processing the rest of the commands
in the batch file. I'm wondering, though, if there is not a more elegant
means of doing this using the Environ command or some other command.

PNK

unread,
Sep 1, 2009, 3:54:01 PM9/1/09
to
My problem is identical to the one mentioned here and the advice about
keeping the window open definitely helped. Any suggestions as to how one can
change the starting directory of the shell or command prompt so that the
default directory is the local directory instead of the D:\ drive.

I'm a novice to programming and I'm sure I haven't used all the right
terminology but I hope I was able to convey my point. Any help would be most
Appreciated.

Regards,

0 new messages