这是我关于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检索数据。 我想从一个名为" u_0_1"的ID中检索输入标记中的值。这是一个名为" facebook"。我期待检索价值" AQFFmT0qn1TW"在细胞c2上。但是,在运行VBA"运行时错误' 91'对象变量或未设置块变量后,它会弹出这个消息。 我使用不同的方法,例如
,已经尝试了几个星期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
答案 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 && Event.__inlineSubmit && 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。
如果您需要更多助手,请回复网址,我可以在其中找到您正在寻找的内容。
干杯