【问题标题】:Runtime error 91 and 1004 VBA运行时错误 91 和 1004 VBA
【发布时间】:2018-02-19 12:32:27
【问题描述】:

我是 VBA 新手。我一直在尝试将值“3.2500”放入单元格 B1。到目前为止,我有时会收到运行时错误 1004 和错误 91 - 对象变量或未设置块变量。可能是什么原因造成的?它是一个干净的工作簿。

Sub extract()

Dim myIE As Object
Dim myIEDoc As Object
Dim element As IHTMLElement

Set myIE = CreateObject("InternetExplorer.Application")

 myIE.Visible = False

myIE.navigate "https://zonasegura1.bn.com.pe/TipoCambio/"

While myIE.Busy
    DoEvents
Wend
 Set myIEDoc = myIE.document

Range("B1") = myIEDoc.getElementsByClassName("movimiento")(0).getElementsByClassName("l2 valor")(0)

End Sub

【问题讨论】:

  • 尝试在最后一行添加.innerText
  • 试过了,得到错误 91 -object variable or with block variable not set-。
  • 你为什么一直问the same question?你做了什么调试?你知道怎么调试吗?除了一遍又一遍地问同一个问题,从对以前问题的回答中添加一点点,你自己做了什么?

标签: vba excel runtime-error getelementsbyclassname


【解决方案1】:

getElementsByID("movimiento") 正在考虑 class="movimiento bg" 匹配,并且没有匹配的子元素,因此您试图从无到有获取 .innerText。您需要类名的第二个匹配项,然后找到子项或直接查找 class="l2 valor" 因为您想要的是文档中的第三个。

'option 1
Range("B1") = myIEDoc.getElementsByClassName("movimiento")(1).getElementsByClassName("l2 valor")(0).innertext
'option 2
Range("B1") = myIEDoc.getElementsByClassName("l2 valor")(2).innertext

请记住,元素集合的索引号是从零开始的,因此要获得第三个,您需要索引号 (2)。

【讨论】:

  • 太棒了!选项 1 工作正常。但是,选项 2 得到了错误的数字 (3.200)
  • 在你想要的那个之前有两个 class="l2 valor" 它应该是 myIEDoc.getElementsByClassName("l2 valor")(2).innertext
【解决方案2】:

你的问题是:

 Range("B1") = myIEDoc.getElementsByClassName("movimiento")(0).getElementsByClassName("l2 valor")(0)

模棱两可。您需要完全指定要发生的事情。如果你不说他们进入什么工作簿或工作表,“范围这个或那个”是没有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多