Novice_VBAUser
Novice_VBAUser

Reputation: 1

How to Click an href using an Excel VBA

I am very new to VBA and had a question regarding how to click an href link in Internet Explorer. There are multiple href's on the source page. I have never encountered this and it has been giving me a hard time! I have looked on this website searching for answers but decided to ask here.

Below I have listed the code I have, up to the point where I encounter the problem, as well as the Source Code on Internet Explorer.

I commented out what I have tried and listed the error I received.

Code Below:

 Sub ()
Dim i As Long
Dim URL As String
Dim IE As Object
Dim objElement As Object
Dim objCollection As Object

User = "User"
Pwd = "Pwd"


Set IE = CreateObject("InternetExplorer.Application")

IE.Visible = True

URL = "URL.com"

IE.Navigate URL

Do While IE.ReadyState <> 4
  DoEvents
Loop

  IE.Document.getElementById("txtUsername").Value = User
  IE.Document.getElementById("txtPassword").Value = Pwd
  IE.Document.getElementById("btnSubmit").Click


  'IE.getElementByClassName("txtTerms").Click - Runtime Error 438
  'IE.getElementByTagName("Claims Management").Click - Runtime Error 438

'Set HREF = IE.Document.getElementsByClassName("txtTerms")
    'For Each HREF In IE.Document.getElementsByTagName("Claims").Click  - No error occurs, nothing happens.

End Sub

Internet Explorer Source Code:

<table id="tblContent">
<tr>
<td class="txtTerms"><a href='href url 1'>Claims</a>

<br>Download<br>Create<br><a class='terms' href='href url 2' 
 target='terms'>Terms</a><br><br></td>
</tr>

My question would be, how to get VBA to click only on 'href url 1'?

Let me know if any additional information is needed. I apologize for my level of VBA but I am excited to learn more!

Thanks for the help!

Upvotes: 0

Views: 17467

Answers (1)

Matteo NNZ
Matteo NNZ

Reputation: 12645

In HTML, href is a property of the type <a> (link) which contains an absolute or relative path. For example:

<a href="/questions/">Questions</a>

... will show as "Questions" and, if you click it, will bring you to www.stackoverflow.com/questions/. Note that "www.stackoverflow.com" has been added automatically since the path is relative.

<a href="https://www.facebook.com">Facebook</a>

... will show as "Facebook" and, if you click it, will bring you to www.facebook.com. In this case, the path is absolute.

Although your HTML code is incomplete, I guess that all the links you want to navigate are contained in the table having id="tblContent". If that's the case, then you can get all the links (tagName == 'a') in that table and store the values in a collection:

Dim allHREFs As New Collection
Set allLinks = IE.Document.getElementById("tblContent").getElementsByTagName("a")
For Each link In allLinks
    allHREFs.Add link.href
Next link

You can then decide to navigate them and do what you have to do one by one:

For j = 1 To allHREFs.Count
    IE.Navigate URL + allHREFs(j) '<-- I'm assuming hrefs are relative.
    'do your stuff here
Next href

Upvotes: 1

Related Questions