【发布时间】:2018-09-12 12:36:38
【问题描述】:
运行以下代码会抛出错误 91。它有什么问题?
Sub abc()
Dim objIE As InternetExplorer
Set objIE = New InternetExplorer
Dim elem As HTMLBaseElement
objIE.Visible = True
objIE.navigate "https://www.nseindia.com/live_market/dynaContent/live_watch/get_quote/GetQuote.jsp?symbol=COALINDIA"
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
Set elem = getXPathElement("/html[1]/body[1]/div[2]/div[4]/div[2]/div[1]/div[4]/ul[1]/li[1]/span[1]", objIE.document)
Range("A5").Value = elem.innerText
End Sub
公共函数 getXPathElement(sXPath As String, objElement As HTMLBaseElement) As HTMLBaseElement 将 sXPathArray() 调暗为字符串
Dim sNodeName As String
Dim sNodeNameIndex As String
Dim sRestOfXPath As String
Dim lNodeIndex As Long
Dim lCount As Long
' Split the xpath statement
sXPathArray = Split(sXPath, "/")
sNodeNameIndex = sXPathArray(1)
If Not InStr(sNodeNameIndex, "[") > 0 Then
sNodeName = sNodeNameIndex
lNodeIndex = 1
Else
sXPathArray = Split(sNodeNameIndex, "[")
sNodeName = sXPathArray(0)
lNodeIndex = CLng(Left(sXPathArray(1), Len(sXPathArray(1)) - 1))
End If
sRestOfXPath = Right(sXPath, Len(sXPath) - (Len(sNodeNameIndex) + 1))
Set getXPathElement = Nothing
For lCount = 0 To objElement.ChildNodes().Length - 1
If UCase(objElement.ChildNodes().Item(lCount).nodeName) = UCase(sNodeName) Then
If lNodeIndex = 1 Then
If sRestOfXPath = "" Then
Set getXPathElement = objElement.ChildNodes().Item(lCount)
Else
Set getXPathElement = getXPathElement(sRestOfXPath, objElement.ChildNodes().Item(lCount))
End If
End If
lNodeIndex = lNodeIndex - 1
End If
Next lCount
结束函数
【问题讨论】:
-
调试器肯定会告诉你,但我敢打赌
Set elem = getXPathElement失败了,这意味着尝试读取elem.innerText会导致错误。 -
您正在针对
Nothing的对象引用进行成员调用。哪条线抛出错误?getXPathElement到底在做什么?