VBA - opening files with Shell command

E

Eric

I'm writing a macro in Excel which finds other files (not Excel files)
with a given name and then opens them. I'm using the Windows registry
to find the programs associated with the files and then using the Shell
command to open the files with the given program. My problem is that
for some programs the Shell command opens a new instance of the program
for each additional file, i.e. each AutoCAD file opens into its own
instance of AutoCAD even if AutoCAD is already running.

So my question is, is there a switch for the Shell command that tells
it to check to see if an instance of a program is already running
before starting a new one, and, if the program is already running,
opens the file with the existing instance? Or is there another way of
doing this without getting into the API of each program in question?

Here's a snippet of my code:

strCmd = appWord.System.PrivateProfileString("", _
"HKEY_CLASSES_ROOT\" & regType & "\shell\Open\command", _
"")

If Len(strCmd) > 0 Then
strCmd = Replace(strCmd, "%1", fileWithPath) 'for pdf & dwg files
strCmd = Replace(strCmd, "/dde", "/one " & """" & fileWithPath &
"""") 'for solidworks files
Shell strCmd, vbNormalFocus
Else
MsgBox prompt:="Could not find an application" & vbCr & _
"registered to display file.", _
Buttons:=vbCritical + vbOKOnly, _
Title:="Not Registered"
End If


Thanks!
Eric
 
J

John.Greenan

Some applications just run one file at a time. Think of Excel - you can open
multiple workbooks in one application instance, but then think of MS Paint -
one file at a time. You should check to see if the application supports
multiple open documents.

You can try and create the application using GetObject / CreateObject if you
know the name of the application class - like Excel.Application.10 for an
Excel v10 instance.
 
E

Eric

Thanks for the reply.

The applications in question do support multiple open documents. I'm
trying to duplicate the behavior of Windows Explorer -- if you open an
AutoCAD or Solidworks file (two of the applications in question) by
double-clicking the file, Windows either starts an instance of the
program if one isn't running already, or opens the file into an
existing instance if it is. Also, I'm trying to avoid going the
GetObject / CreateObject route since my macro needs to work over a wide
range of file types and programs.

Any more ideas?

Thanks!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top