Vba 如何使getElementsBy*结果变暗
我正在用VBA进行一些网络搜索,有一次我得到了这条线Vba 如何使getElementsBy*结果变暗,vba,excel,Vba,Excel,我正在用VBA进行一些网络搜索,有一次我得到了这条线 Set valueResult = currPage.getElementById("rg_s").getElementsByTagName("IMG") 其中,currPage声明为HTMLDocument 我想知道如何DimvalueResult实现: 智能感知(vba的自动完成)结果 更好的执行时间(通过使用特定的而不是默认的变量类型) 当我查看“局部变量”窗口时,我被告知Set为它提供了 DispHTMLElementCollect
Set valueResult = currPage.getElementById("rg_s").getElementsByTagName("IMG")
其中,currPage
声明为HTMLDocument
我想知道如何Dim
valueResult
实现:
变量
类型)Set
为它提供了
DispHTMLElementCollection
类型,但当IDim
时,这不是一个选项。我发现getElementsBy*
实际上返回的是一个数组,而不是一个数组,所以我一直在尝试遵循这条途径,但找不到任何特定于VBA的东西
那么我应该如何声明它呢?-目前我刚刚得到Dim valueResult作为Object
,但这几乎不比Variant
好,而且不会给出IntelliSense提示
注意。我已经勾选了Microsoft HTML对象库,它应该是
IHTMlementCollection
类型
Dim valueResult As IHTMLElementCollection
'// your code here
Set valueResult = currPage.getElementById("rg_s").getElementsByTagName("IMG")
getElementsByTagName()
方法将返回一个集合
,因为可能存在多个匹配项。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
子测试()
作为IHTMLElementCollection的Dim col
作为IHTMlement的尺寸项目
设置IE=CreateObject(“InternetExplorer.Application”)
即“导航”http://www.google.co.uk"
而IE.ReadyState 4
多芬特
温德
Set col=IE.Document.getElementsByTagName(“a”)
每一个我在col
设置项目=i
Debug.Print item.outerText
下一个
即退出
端接头
- 最重要的是添加引用:
- 微软互联网控制(SHDocVw)
- Microsoft HTML对象库
Object
时,intellisense将不可用,因为在设计时Visual Basic运行时无法知道变量将包含何种引用。这将在运行时首先知道
然后这个代码:
Set IE = CreateObject("InternetExplorer.Application")
可以用如下代码替换:
Dim IE As SHDocVw.InternetExplorer
Set IE = New SHDocVw.InternetExplorer
如果不引用Microsoft HTML对象库
,将不会编译像Dim col As IHTMLElementCollection
这样的声明
那么对象浏览器
就是您的朋友:
HtmlLevel有效吗?遇到这种困难时,在即时窗口中使用
TypeName
,局部窗口也非常有用。如果没有它,像Dim col As IHTMlementCollection这样的声明将无法编译。
-编译时只需要HTML对象库,不需要互联网控制。在实时环境中,实际上最好对IE自动化之类的东西使用后期绑定。+1作为对象浏览器的参考。这个答案中的大部分步骤在我的问题中都有详细介绍,但我很感激如果我将来遇到同样的问题,对象浏览器可以提供答案@MacroMan我很感兴趣,你所说的“后期绑定”是什么意思?@Greedo当你使用CreateObject(“InternetExplorer.Application”)
你是后期绑定。这意味着您在创建对象时没有事先实际设置对其库的引用。如果您将Dim IE用作新的InternetExplorer,那么您有一个对该库的引用集,这称为早期绑定。