user1207381
user1207381

Reputation: 581

Where to find VBA functions for working with internet explorer

I am working on a VBA function to go to a webpage, find a single HTML element, and display its contents. Here is what I have so far.

Function WebTableToSheet(webpage As String, tag As String, count As Integer) As String


  'Tested using IE7,  Excel 2000 SP1, and Windows XP
  Dim objIE As Object
  Dim varTables, varTable, document
  Dim allTags, tags
  Dim varRows, varRow
  Dim varCells, varCell
  Dim lngRow As Long, lngColumn As Long
  Dim strBuffer As String

  Set objIE = CreateObject("InternetExplorer.Application")

 'Setup
  With objIE
    .AddressBar = False
    .StatusBar = False
    .MenuBar = False
    .Toolbar = 0
    .Visible = True
    .Navigate webpage
  End With

  'Load webpage
  While objIE.Busy
  Wend
  While objIE.document.ReadyState <> "complete"
  Wend


  varTable = objIE.document.All

  allTags = objIE.document.All.tags(tag)

  WebTableToSheet = allTags.Item(count)

  Debug.Print "Testing function"




Cleanup:
    Set varCell = Nothing: Set varCells = Nothing
    Set varRow = Nothing: Set varRows = Nothing
    Set varTable = Nothing: Set varTables = Nothing
    objIE.Quit
    Set objIE = Nothing
End Function

I am able to open InternetExplorer, got to the webpage specified in the function, but when I try searching for a specific tag, it seems to fail. I have had trouble searching for Microsoft VBA Internet Explorer documentation and knew what variables and methods are available for this task?

Upvotes: 2

Views: 30691

Answers (3)

Gajendra Santosh
Gajendra Santosh

Reputation: 159

ieApp.Navigate "Https://duckduckgo.com/"

'Wait for Internet Explorer to finish loading
Do While ieApp.Busy: DoEvents: Loop
Do While ieApp.Busy And Not ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop

ieApp.Document.getelementbyid("search_form_input_homepage").Value = "Gajendra Santosh"
ieApp.Document.getelementbyid("search_button_homepage").Click

Upvotes: 0

Sathik Raja
Sathik Raja

Reputation: 21

Team, IE webpage full loading check use below mentioned code

Application.Wait (Now + TimeValue("0:00:1"))

Do Until IE.Busy = False
   DoEvents
Loop

Upvotes: 2

mkingston
mkingston

Reputation: 2718

I'd recommend setting a reference to shdocvw.dll and the Microsoft HTML Object Library. In XP shdocvw.dll is in your system32 folder, the HTML Object Library should be in your list of references. I only have access to XP at the moment, so you'll have to do a search for any other ver of windows you're using. Then in your code you can do the following:

Dim IE as SHDocVw.InternetExplorer
Dim doc as HTMLDocument
Dim el as IHTMLElement
Set IE = new SHDocVw.InternetExplorer

With IE
  .navigate "some.webpage.com"
  .visible = true
End With

Do
  'Nothing
Loop Until IE.readyState = READYSTATE_COMPLETE ' = 4

Set doc = IE.Document
Set el = doc.getElementById("someElementId")
If Not el Is Nothing Then
  MsgBox el.innerText
End If

Upvotes: 2

Related Questions