如何调暗getElementsBy *结果

时间:2017-03-28 09:53:17

标签: vba excel-vba excel

我正在从VBA进行一些互联网搜索,并且我有一条线

  gl.activeTexture(gl.TEXTURE0);
  gl.bindTexture(gl.TEXTURE_2D, textures[0]);
  gl.activeTexture(gl.TEXTURE33);
  gl.bindTexture(gl.TEXTURE_2D, textures[1]);

其中Set valueResult = currPage.getElementById("rg_s").getElementsByTagName("IMG") 被声明为currPage

我想知道HTMLDocument Dim如何实现:

  1. IntelliSense(vba的自动填充)结果
  2. 更好的执行时间(通过使用特定而非默认的valueResult类型)
  3. 当我查看本地窗口时,我被告知Variant给出了它  Set类型,但在我DispHTMLElementCollection时,这不是一个选项。我Dim getElementsBy*实际上返回read而不是数组,所以我一直在尝试遵循该途径,但找不到任何特定的VBA。

    那我应该怎么声明呢? - 目前我刚刚获得Dim valueResult As Object,但这并不比Variant好,并且没有提供IntelliSense提示。< / p>

    NB。我勾选了Microsoft HTML对象库

2 个答案:

答案 0 :(得分:2)

它应该是IHTMLElementCollection类型。

Dim valueResult As IHTMLElementCollection

'// your code here

Set valueResult = currPage.getElementById("rg_s").getElementsByTagName("IMG")

getElementsByTagName()方法将返回Collection,因为可能存在多个匹配项。 getElementById()方法将返回一个元素,因此IHTMLElement

快速示例:

Sub test()

Dim col As IHTMLElementCollection
Dim item As IHTMLElement

Set IE = CreateObject("InternetExplorer.Application")

IE.Navigate "http://www.google.co.uk"

While IE.ReadyState <> 4
    DoEvents
Wend

Set col = IE.Document.getElementsByTagName("a")

For Each i In col
    Set item = i
    Debug.Print item.outerText
Next

IE.Quit

End Sub

答案 1 :(得分:1)

  • 最重要的是添加引用:
    • Microsoft Internet Controls(SHDocVw)
    • Microsoft HTML对象库

早期后期绑定有其优点和缺点,但如果您希望获得intellisense的支持,则需要引用类型库。当声明为Object时,没有intellisense可用,因为在设计时Visual Basic运行时无法知道变量将包含哪种引用。这将在运行时首先知道。

enter image description here

然后这段代码:

Set IE = CreateObject("InternetExplorer.Application")

可以替换为这样的代码:

Dim IE As SHDocVw.InternetExplorer
Set IE = New SHDocVw.InternetExplorer 

如果不引用Microsoft HTML Object LibraryDim col As IHTMLElementCollection 之类的声明将无法编译

然后Object Browser是你的朋友:

enter image description here

enter image description here