VBA:无法使用getelementsbyTagname()在<input />标记内提取值。值

时间:2014-11-09 19:39:13

标签: vba getelementbyid getelementsbytagname

这是我关于stackflow的第一篇文章:)我已经谷歌搜索VBA知识并写了一个VBA大约一个月。

我的电脑信息:

1.window 8.1

2.excel 2013

3.ie 11

我的Excel参考

Microsoft Object Library:是

Microsoft Internet Controls:是

Microsoft Form 2.0对象库:是

Microsoft Script Control 1.0:是的

问题:

我试图使用VBA自动从Internet Explorer检索数据。 我想从一个名为&#34; u_0_1&#34;的ID中检索输入标记中的值。这是一个名为&#34; facebook&#34;。我期待检索价值&#34; AQFFmT0qn1TW&#34;在细胞c2上。但是,在运行VBA&#34;运行时错误&#39; 91&#39;对象变量或未设置块变量后,它会弹出这个消息。 我使用不同的方法,例如

,已经尝试了几个星期

1.getelementsbyClassname

2.getelementbyid

3.getelementsbyTagname

但它只是不起作用。

网址:

http://coursesweb.net/javascript/getelementsbytagname

以下是我的VBA代码。你能帮帮我一点吗?

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            

2 个答案:

答案 0 :(得分:1)

感谢您的帮助。我不知道JS和VBA在getelementsby()方法方面有区别。并使用循环方法找到我发现它非常有用的id。

我仍然有一些问题需要从表单或输入类型中检索值。我希望你能帮助我或给我一些建议。

预期结果:

检索值“AQFFmT0qn1TW”并自动将其复制到Cell(“c2”)。

实际结果:

没有返回Cell(“C2”)

以下是HTML元素。

<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">         

以下是基于您的代码的VBA代码。

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

干杯。

答案 1 :(得分:0)

首先,我无法在您搜索的网站标记源中找到。无论如何,我认为你不能像在JS中那样链接getElementById.getElementsByTag。你必须遍历文档元素的集合。

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

首先我收集标签&#34; ul&#34;然后循环通过它们以获取id&#34; ex4&#34;。在您的情况下,您可以收集&#34;输入&#34;然后循环获取您想要的ID。找到后面跟不同id的id不应该很难,只有一些if...then s。

如果您需要更多助手,请回复网址,我可以在其中找到您正在寻找的内容。

干杯