Controlling Internet Explorer local intranet using Excel VBA Controlling Internet Explorer local intranet using Excel VBA vba vba

Controlling Internet Explorer local intranet using Excel VBA


Here is a quick and easy solution for this issue:

Instead of:

set IE = createobject("internetexplorer.application")

Use:

Set IE = New InternetExplorerMedium

No need to tweak the IE settings


Here's what's happening. When your browser internally "jumps" to a different security zone - from say a local address to an inTRAnet address or to an inTERnet address - IE closes/drops the current process of IE and opens another one with tighter security. The old and new IE processes are IE child processes to the parent IE task so you don't see it happen either by watching the browser or watching the process in Task Manager. If you use Process Explorer (free from Microsoft), you can see this happen.

What you need to do in this type of environment is use Anup Upadhyay's solution above. His code snippet looks at all IE tasks (parent and child doesn't make a difference) and finds the new IE process that is pointing to the web address that the original process was given. As long as you don't have multiple browsers open to the same address, it will find the new process reliably and carry on like you would expect it to.

Note: You might also need to use the InternetExplorerMedium object as opposed to the InternetExplorer object. It is also better at "holding on" to a session.

Here's my version which is almost the same thing as Anup's.

References for MS Office VBA:

  • Microsoft Internet Controls

  • Microsoft Shell Controls and Automation

n

Dim IE As InternetExplorerMedium ' This object (the "medium" variety as opposed to "InternetExplorer") is necessary in our security climateDim targetURL As StringDim webContent As StringDim shDim eachIEtargetURL = "[your URL here]"Set IE = New InternetExplorerMediumIE.Visible = False ' Set to true to watch what's happeningIE.Navigate targetURLWhile IE.Busy  DoEvents  WendDo  Set sh = New Shell32.Shell  For Each eachIE In sh.Windows    If InStr(1, eachIE.LocationURL, targetURL) Then      Set IE = eachIE      'IE.Visible = False  'This is here because in some environments, the new process defaults to Visible.        Exit Do      End If    Next eachIE  LoopSet eachIE = NothingSet sh = NothingWhile IE.Busy  ' The new process may still be busy even after you find it  DoEvents  Wend


Try this one:

Set IE = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")