VBA: not able to pull value within <input> tag using getelementsbyTagname().Value

喜你入骨 提交于 2019-12-12 04:44:34

问题


This is my first post on stackflow :) I've been Googling VBA knowledge and writing some VBA for about a month.

My computer info:

1.window 8.1

2.excel 2013

3.ie 11

My excel reference

Microsoft Object Library: yes

Microsoft Internet Controls: yes

Microsoft Form 2.0 Object library: yes

Microsoft Script Control 1.0: yes

Issue:

I was trying to retrieve data from internet explorer automatically using VBA. I would like to retrieve the value within an input tag from a id called "u_0_1" which is under a id called "facebook". I am expecting to retrieve the value "AQFFmT0qn1TW" on cell c2. However, it got this msg popped up after I run the VBA "run-time error '91':object variable or with block variable not set. I have been trying this for a couple of weeks using different methods such as,

1.getelementsbyClassname

2.getelementbyid

3.getelementsbyTagname

But it just doesn't work.

url:

http://coursesweb.net/javascript/getelementsbytagname

Below is my VBA code. Could you guys help me out a little bit please?

Private Sub CommandButton1_Click()
Dim ie As Object
Dim Doc As HTMLDocument
Dim getThis As String



Set ie = CreateObject("InternetExplorer.Application")

    ie.Visible = 0


    ie.navigate "http://coursesweb.net/javascript/getelementsbytagname"
    Do
    DoEvents
    Loop Until ie.readyState = 4



    Set Doc = ie.document


    getThis = Trim(Doc.getElementById("u_0_1")(0).getElementsByTagName("input")(0).Value)
    Range("c2").Value = getThis
End Sub            

回答1:


Thanks for your help. I have no idea that there is difference between JS and VBA in aspect of getelementsby () methods. And using the loop method to find the id which I find it very useful as well.

I still have some issues to retrieve value from a form or input type. I hope that you could help me or give me some suggestions as well.

Expected Result:

retrieve the value "AQFFmT0qn1TW" and copy it on Cell ("c2") automatically.

Actual Result:

nothing return to Cell ("C2")

Below is the HTML elements.

<form rel="async" ajaxify="/plugins/like/connect" method="post" action="/plugins/like/connect" onsubmit="return window.Event &amp;&amp; Event.__inlineSubmit &amp;&amp; Event.__inlineSubmit(this,event)" id="u_0_1">
<input type="hidden" name="fb_dtsg" value="AQFFmT0qn1TW" autocomplete="off">         

Below is the VBA code based on your code.

Private Sub CommandButton1_Click()
Dim ie As Object
Dim Doc As HTMLDocument
Dim Elements As IHTMLElementCollection
Dim Element As IHTMLElement

Set ie = CreateObject("InternetExplorer.Application")

ie.Visible = 0

ie.navigate "http://coursesweb.net/javascript/getelementsbytagname"
Do
DoEvents
Loop Until ie.readyState = 4

Set Doc = ie.document

Set Elements = Doc.getElementsByTagName("input")

For Each Element In Elements
    If Element.name = "fb_dtsg" Then
        Range("c2").Value = Element.innerText
    End If
Next Element

Set Elements = Nothing

End Sub

Cheers.




回答2:


first of all, I can't find in source of website tags you were searching. Anyway, I think you can't chain getElementById.getElementsByTag as in JS. You have to loop through collection of document elements.

Private Sub CommandButton1_Click()
Dim ie As Object
Dim Doc As HTMLDocument
Dim Elements As IHTMLElementCollection
Dim Element As IHTMLElement

    Set ie = CreateObject("InternetExplorer.Application")

    ie.Visible = 0

    ie.navigate "http://coursesweb.net/javascript/getelementsbytagname"
    Do
    DoEvents
    Loop Until ie.readyState = 4

    Set Doc = ie.document

    Set Elements = Doc.getElementsByTagName("ul")

    For Each Element In Elements
        If Element.ID = "ex4" Then
            Sheets(1).Cells(1, 1).Value = Element.innerText
        End If
    Next Element

    Set Elements = Nothing

End Sub

First I'm getting collection of tags "ul", then looping through them for id "ex4". In your case you'd get collection of "input"s then loop for id you want. Finding id which is followed by different id shouldn't be hard, just some if...thens.

If you need further assistant please respond with url in which I can find exactly what you're looking for.

Cheers



来源:https://stackoverflow.com/questions/26832431/vba-not-able-to-pull-value-within-input-tag-using-getelementsbytagname-valu

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!