I know this is an old thread, but thought I would post how I solved the problem. It takes a little longer to run the code, but does not require any API calls.
I first created a public sub that controls the navigation to the desired url.
Public Sub NavigateToPage(ByVal url As String, ByRef IE As Object) On Error GoTo SkipBrowse
IE.Navigate2 url
While IE.Busy
DoEvents
Wend
While IE.document.readyState <> "complete"
DoEvents
Wend
SkipBrowse:
End Sub
Then I call the sub (passing the url and the IE object) from the original routine and then check to see if the loaded url is the url specified. If not, I go back to a defined label and try again.
retry1:
Call NavigateToPage(someURL, IE)
If Not IE.LocationURL = someURL Then GoTo retry1
You may want to add a counter to limit the number of tries or something like that, but so far this has worked for me.