Open a file in the same instance with ShellExecute

M

MichDenis

Hi everyone,

If someone knows if it's possible to use "ShellExecute"
(not workbooks.open) to open a file in the same instance
of the application where the macro is ? If yes, How to do it ?


'API
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpszOp As _
String, ByVal lpszFile As String, ByVal lpszParams As String, _
ByVal lpszDir As String, ByVal FsShowCmd As Long) As Long

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

'-----------------------------------------
Sub ShellOpenFile()

Const SW_SHOWNORMAL = 1
Dim hwnd As Long
Dim File As String

File = "C:\Workbook2.xls"

hwnd = FindWindow(vbNullString, Application.Caption)
ShellExecute hwnd, "open", File, vbNullString, vbNullString, SW_SHOWDEFAULT

End Sub
'-----------------------------------------

Thanks for your collaboration and your help.
 
P

Peter T

Try sending the desktop window 0

ShellExecute 0&, "open", Chr(34) & File & Chr(34), _
vbNullString, vbNullString, vbNormalFocus

May be worth bracketing the file with quotes in case of spaces as above.

If multiple excel instances are open ensure yours is the active window,
doesn't guarantee it won't open in an arbitrary instance but it seems to
help. But surely, why not simply use workbooks.open.

Regards,
Peter T
 
M

MichDenis

Thanks for your response.... but it's not working !

My goal was to be able to open a .DQY file using a vba procedure.

The submitted "sub" do the job but open the desired file in another instance of Excel.

If someone knows a way of doing it within tne same instance, I will be pleased to know it.

Thanks for your collaboration.



'API
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpszOp As _
String, ByVal lpszFile As String, ByVal lpszParams As String, _
ByVal lpszDir As String, ByVal FsShowCmd As Long) As Long

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

'-----------------------------------------
Sub ShellOpenFile()

Const SW_SHOWNORMAL = 1
Dim hwnd As Long
Dim File As String

File = "C:\Workbook2.xls"

hwnd = FindWindow(vbNullString, Application.Caption)
ShellExecute hwnd, "open", File, vbNullString, vbNullString, SW_SHOWDEFAULT

End Sub
'-----------------------------------------
 

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