VBA:运行时错误424:尝试web刮取时需要对象
我正在尝试使用morgnistar.co.uk更新各种基金规模。代码工作正常,直到它突然停止并出现错误: “运行时错误424:需要对象”。 发生错误的确切行是:VBA:运行时错误424:尝试web刮取时需要对象,vba,object,Vba,Object,我正在尝试使用morgnistar.co.uk更新各种基金规模。代码工作正常,直到它突然停止并出现错误: “运行时错误424:需要对象”。 发生错误的确切行是: Set allData=IE.document.getElementById(“概览QuickStatsDiv”).getElementsByTagName(“tbody”)(0) 我们的想法是最终扫描整个“tbody”标签,并在“tr”和“td”标签中查找“Fund Size”一行。当找到“基金规模”时,代码将返回第三个“td”-标记
Set allData=IE.document.getElementById(“概览QuickStatsDiv”).getElementsByTagName(“tbody”)(0)
我们的想法是最终扫描整个“tbody”标签,并在“tr”和“td”标签中查找“Fund Size”一行。当找到“基金规模”时,代码将返回第三个“td”-标记(实际基金规模)。
在这之后,我会添加一个循环来循环我拥有的资金列表。
由于代码完全停止工作,我还没有做到这一点。这里我只是想检查代码是否返回实际的基金规模。
由于“tr”标记中并不总是有3个“td”标记,因此我仍然需要构造某种IF语句来解决这个问题
但现在我只想知道如何让代码再次运行?我花了很多时间寻找答案,但这似乎是一个可变类型的问题,解决方案取决于具体情况
我正在使用Excel 2010和Internet Explorer 11
易于复制粘贴的URL格式:
编辑:
切换方法。现在的问题是提取基金规模。因此,下面的代码按原样工作,但我需要添加几行代码,以获得基金规模。这是我第一次使用这种方法,所以很可能我还没有理解一些真正基本的东西。尽管如此,我还是无法独自找到解决方案
Sub XMLhttpRequestTest()
'Microsoft XML, v 6.0
'Microsoft HTML object library
Dim HTMLDoc As New HTMLDocument
Dim ohttp As New MSXML2.XMLHTTP60
Dim myurl As String
Dim TRelements As Object
Dim TRelement As Object
myurl = "http://www.morningstar.co.uk/uk/funds/snapshot/snapshot.aspx?id=F0GBR04BKW"
ohttp.Open "GET", myurl, False
ohttp.send
HTMLDoc.body.innerHTML = ohttp.responseText
With HTMLDoc.body
Set TRelements = .getElementsByTagName("tr")
For Each TRelement In TRelements
Debug.Print TRelement.innerText
Next
End With
End Sub
你可以使用
然后选择索引4处的元素
#
表示id。
=类名
Option Explicit
Public Sub XMLhttpRequestTest()
'Microsoft XML, v 6.0
'Microsoft HTML object library
Dim HTMLDoc As New HTMLDocument, ohttp As New MSXML2.XMLHTTP60
Const URL As String = "http://www.morningstar.co.uk/uk/funds/snapshot/snapshot.aspx?id=F0GBR04BKW"
Dim TRelements As Object, TRelement As Object
With ohttp
.Open "GET", URL, False
.send
HTMLDoc.body.innerHTML = .responseText
Debug.Print HTMLDoc.querySelectorAll("#overviewQuickstatsDiv td.line.text")(4).innerText
'Your other stuff
End With
End Sub
你可以使用
然后选择索引4处的元素
#
表示id。
=类名
Option Explicit
Public Sub XMLhttpRequestTest()
'Microsoft XML, v 6.0
'Microsoft HTML object library
Dim HTMLDoc As New HTMLDocument, ohttp As New MSXML2.XMLHTTP60
Const URL As String = "http://www.morningstar.co.uk/uk/funds/snapshot/snapshot.aspx?id=F0GBR04BKW"
Dim TRelements As Object, TRelement As Object
With ohttp
.Open "GET", URL, False
.send
HTMLDoc.body.innerHTML = .responseText
Debug.Print HTMLDoc.querySelectorAll("#overviewQuickstatsDiv td.line.text")(4).innerText
'Your other stuff
End With
End Sub
没有责备。您的代码在我这端运行得很好。为什么将其标记为[必需]?标记描述是“Required是一个强制提供输入的输入元素的HTML属性”。那么您认为错误与该属性的使用有关吗?
IE
尚未完成加载,我猜,请检查值IE.Document.Body
。在导航后使用的同时使用即忙或IE.Readystate 4`。跳过do循环,开始时您已经有了正确的IE
,如果Instr
条件不为真,这个循环可能会无限。非常简单:您选择的div不包含tbody
元素,因此.getElementsByTagName(“tbody”)
返回NULL。代码再次运行了一段时间,直到停止。我做了进一步的研究,原因可能与使用Internet Explorer有关。代码可能试图打开“太多”窗口(或类似的东西),这会导致代码以某种方式停止。目前,我在第二行得到一个错误(设置IE=…)。错误消息:“vba运行时错误”-2147467259(80004005)':自动化错误未指定错误”。我切换到XMLHttpRequest方法,它似乎可以工作。我只在解析数据方面有问题。我添加了上面的代码作为编辑。没有复制。您的代码在我这端运行得很好。为什么将其标记为[必需]?标记描述是“Required是一个强制提供输入的输入元素的HTML属性”。那么您认为错误与该属性的使用有关吗?IE
尚未完成加载,我猜,请检查值IE.Document.Body
。在导航后使用的同时使用即忙或IE.Readystate 4`。跳过do循环,开始时您已经有了正确的IE
,如果Instr
条件不为真,这个循环可能会无限。非常简单:您选择的div不包含tbody
元素,因此.getElementsByTagName(“tbody”)
返回NULL。代码再次运行了一段时间,直到停止。我做了进一步的研究,原因可能与使用Internet Explorer有关。代码可能试图打开“太多”窗口(或类似的东西),这会导致代码以某种方式停止。目前,我在第二行得到一个错误(设置IE=…)。错误消息:“vba运行时错误”-2147467259(80004005)':自动化错误未指定错误”。我切换到XMLHttpRequest方法,它似乎可以工作。我只在解析数据方面有问题。我添加了上面的代码作为编辑。
Option Explicit
Public Sub XMLhttpRequestTest()
'Microsoft XML, v 6.0
'Microsoft HTML object library
Dim HTMLDoc As New HTMLDocument, ohttp As New MSXML2.XMLHTTP60
Const URL As String = "http://www.morningstar.co.uk/uk/funds/snapshot/snapshot.aspx?id=F0GBR04BKW"
Dim TRelements As Object, TRelement As Object
With ohttp
.Open "GET", URL, False
.send
HTMLDoc.body.innerHTML = .responseText
Debug.Print HTMLDoc.querySelectorAll("#overviewQuickstatsDiv td.line.text")(4).innerText
'Your other stuff
End With
End Sub