We help IT Professionals succeed at work.

Check out our new AWS podcast with Certified Expert, Phil Phillips! Listen to "How to Execute a Seamless AWS Migration" on EE or on your favorite podcast platform. Listen Now


Opening Url Using Shellexecute Doesn't Work On All Xp Pc's

Medium Priority
Last Modified: 2012-06-27

I have an app that uses the following code to launch URLs:

Dim a As Long
a = ShellExecute(0, "open", "http://www.arbortech.com.au/projectplans/coffeetable/coffee.html", 0, 0, 1)

The code works fine EXCEPT ON CERTAIN XP MACHINES.  No errors, just nothing when the label is clicked.  I do not have direct access to the XP PC's as they are customer PC's.

PLEASE tell me someone has experienced this before and knows what to do!
Watch Question

For some reason *.html files are not associated with their default browser??  That's the only thing I can think of.  Maybe send them a simple *.html page and see if they double-click it, if it opens up their default browser.
why don't you try opening the url like this:

'Add the Microsoft Internet Transfer Controls 6.0 Component to your form

Dim IE

Private Sub Form_Load()
Set IE = CreateObject("InternetExplorer.Application")
End Sub

Private Sub Command1_Click()
IE.Navigate("http://www.arbortech.com.au/projectplans/coffeetable/coffee.html"), 1
End Sub
The nice thing about ShellExecute is that it uses the user's default browser, so if someone really prefers Netscape, it would use Netscape, or Opera, etc.  Using IE Automation forces the user to use IE, though, it is fairly gauranteed to work as I am not aware of Windows machines that do not have IE loaded.

>>'Add the Microsoft Internet Transfer Controls 6.0 Component to your form

Actually, the way your code is written, no reference is required since you use late-binding
try changing the parameters as below

ShellExecute hwnd, "OPEN", "www.google.com", vbNullString, vbNullString, 1


yes, you're right Azra, i wasn't thinking.. :(


Oddly enough, this isn't working either.  I put the shellexecute declaration in a public module like this:

Public Declare Function ShellExecute _
Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation _
As String, ByVal lpFile As String, ByVal _
lpParameters As String, ByVal lpDirectory _
As String, ByVal nShowCmd As Long) As Long

Do I need to put it on every form with a shellexecute hyperlink instead?
Could it be a problem where the user is missing shell32.dll?
Seems to be on only a few random PC's running XP.
>>Do I need to put it on every form with a shellexecute hyperlink instead?
No, just place declaration in BAS module and declare it as public.

>>Could it be a problem where the user is missing shell32.dll?
No, shell32.dll exists on all Windows OS (except 3.x ;-])

If you can, look at the LastDllError, it can help.
Look at this:

Return Values (ShellExecute API)

If the function succeeds, the return value is the instance handle of the application that was run, or the handle of a dynamic data exchange (DDE) server application.
If the function fails, the return value is an error value that is less than or equal to 32. The following table lists these error values:

Value      Meaning
0      The operating system is out of memory or resources.
ERROR_FILE_NOT_FOUND      The specified file was not found.
ERROR_PATH_NOT_FOUND      The specified path was not found.
ERROR_BAD_FORMAT                      The .EXE file is invalid (non-Win32 .EXE or error in .EXE image).
SE_ERR_ACCESSDENIED      The operating system denied access to the specified file.
SE_ERR_ASSOCINCOMPLETE      The filename association is incomplete or invalid.
SE_ERR_DDEBUSY      The DDE transaction could not be completed because other DDE transactions were being processed.
SE_ERR_DDEFAIL      The DDE transaction failed.
SE_ERR_DDETIMEOUT      The DDE transaction could not be completed because the request timed out.
SE_ERR_DLLNOTFOUND      The specified dynamic-link library was not found.
SE_ERR_FNF      The specified file was not found.
SE_ERR_NOASSOC      There is no application associated with the given filename extension.
SE_ERR_OOM      There was not enough memory to complete the operation.
SE_ERR_PNF      The specified path was not found.
SE_ERR_SHARE      A sharing violation occurred.


The file specified by the lpFile parameter can be a document file or an executable file. If the file is a document file, the ShellExecute function opens or prints it, depending on the value of the lpOperation parameter. If the file is an executable file, the ShellExecute function opens it, even if lpOperation specifies printing.


Turns out it could be a problem if the user has AOL 9.0 Optimized installed.  Haven't confirmed it, but at least on one machine that is the case.  Workaround?
Unlock this solution with a free trial preview.
(No credit card required)
Get Preview
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a free trial preview!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.


Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.