【问题标题】:Getting error 91 "Object variable or with block variable not set"出现错误 91“对象变量或未设置块变量”
【发布时间】: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 到底在做什么?

标签: excel vba xpath


【解决方案1】:

那个元素有一个你可以使用的 id

Option Explicit
Public Sub abc()
    Dim objIE As InternetExplorer, elem As HTMLBaseElement
    Set objIE = New InternetExplorer
    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 = objIE.document.getElementById("lastPrice")
    Debug.Print elem.innerText
    ThisWorkbook.Worksheets("Sheet1").Range("A5").Value = elem.innerText
    objIE.Quit
End Sub

我猜getXPathElement 是自定义函数?没有本机 XPath 选择器方法。如果是这样,如果您必须有使用该函数的解决方案,请在您的问题中包含该函数。

【讨论】:

    猜你喜欢
    • 2014-01-08
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多