Using VBA I can create an InternetExplorer object with 3 different tabs using the following
Option Explicit
Public Enum IE_READYSTATE
Uninitialised = 0
Loading = 1
Loaded = 2
Interactive = 3
complete = 4
End Enum
Sub Example_Click()
Dim ieApp As clsIE
'Create IE and login
If ieApp Is Nothing Then
Set ieApp = New clsIE
With ieApp
'IE Tab1
.IE.Visible = True
.IE.navigate "http://www.bbc.co.uk/news/"
Do While .IE.Busy Or Not .IE.readyState = IE_READYSTATE.complete: DoEvents: Loop
'IE Tab2
.IE.Navigate2 "http://www.bbc.co.uk", CLng(2048)
Do While .IE.Busy Or Not .IE.readyState = IE_READYSTATE.complete: DoEvents: Loop
'IE Tab3
.IE.Navigate2 "http://www.bbc.co.uk", CLng(2048)
Do While .IE.Busy Or Not .IE.readyState = IE_READYSTATE.complete: DoEvents: Loop
End With
End If
End Sub
How can I then access these tabs to....
- Quit/Close a specific tab?
- Navigate to a new URL on a specific tab?
- Access a specific tab DOM?
I know how to do all of this with a single tab but not multiple tabs?
Simple workaround is just reassign the new tab to the object
Here is how I solved the problem of grouping tabs in one IE window using VBScript. If the function finds IE window with a tab whose URL starts with
tabGroupS
(e.g. "http://stackoverflow.com") then it adds a new tab to this window and returns this tab otherwise it opens a new window.Try this code:
I have found an answer that appears to work, though I haven't done rigorous testing. I've modified your code so that I can run it without your clsIE module. This code navigates the tabs to 3 urls when opening them and then navigates them to new urls using the shellwindows object.
I changed the do while .busy.. lines as they didn't work for the 2nd and 3rd tabs in that the state of the IE applecation was ready whilst the new tabs were still loading.
It uses the ShellWindows to manipulate the tabs. This is only done by number so I'm guessing it could be prone to errors.
To make it more robust you may want to get some info from the tab after an operation and check that the value is the same when returning to it. For example
sPageTitle = SWs.Item(IETab3Number - 1).Document.Title
could be used to store the title of the page in a tab, the next time you want to use the tab you can check that it hasn't changed.