Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何使getElementsBy*结果变暗_Vba_Excel - Fatal编程技术网

Vba 如何使getElementsBy*结果变暗

Vba 如何使getElementsBy*结果变暗,vba,excel,Vba,Excel,我正在用VBA进行一些网络搜索,有一次我得到了这条线 Set valueResult = currPage.getElementById("rg_s").getElementsByTagName("IMG") 其中,currPage声明为HTMLDocument 我想知道如何DimvalueResult实现: 智能感知(vba的自动完成)结果 更好的执行时间(通过使用特定的而不是默认的变量类型) 当我查看“局部变量”窗口时,我被告知Set为它提供了 DispHTMLElementCollect

我正在用VBA进行一些网络搜索,有一次我得到了这条线

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

我想知道如何
Dim
valueResult
实现:

  • 智能感知(vba的自动完成)结果
  • 更好的执行时间(通过使用特定的而不是默认的
    变量
    类型)
  • 当我查看“局部变量”窗口时,我被告知
    Set
    为它提供了
    DispHTMLElementCollection
    类型,但当I
    Dim
    时,这不是一个选项。我发现
    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对象库
    早期绑定和后期绑定各有优缺点,但如果您希望获得intellisense的支持,则必须引用类型库。当声明为
    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,那么您有一个对该库的引用集,这称为早期绑定。