为什么方法在VBA中成功运行,即使它没有在特定类下的对象库中列出?

时间:2015-07-11 15:56:53

标签: vba interface com

在VBA中,我引用了Microsoft HTML add。我将变量声明为IHTMLelement对象。从那里,我仍然可以使用.getelementsbyclassname方法而不会出现语法错误,尽管事实上它没有在IHTMLelement类的可能方法下列出。还有其他几个变量,这是一个可接受的方法,但我不明白为什么它适用于这个

Sub overflowquestion()

'Turn on References to Microsoft Internet Controls and Microsoft HTML 

'Object Library before running

Dim IE As New InternetExplorer, el As IHTMLElement, sl As IHTMLElement

IE.navigate "www.youtube.com"

Do While IE.readyState <> 4

    DoEvents

Loop

Set el = IE.document.getElementsByClassName("skip-nav")(0)

'Why does this next line work?

Set sl = el.getElementsByClassName("masthead-search-terms-border")(0)


End Sub

1 个答案:

答案 0 :(得分:-1)

这里有很多事情要理解。

el不是接口IHTMLElement的实例,它是实现IHTMLElement接口的类Element的实例。类可以实现多个接口。 Element类可能继承自另一个类,它可以实现其他几个接口,其中一个类/接口具有方法getElementsByClassName

正如Paulo Madeira在评论中指出的那样,VBA能够进行后期绑定(请参阅overview of Interfaces, Classes, late an early binding的文档),因此它会尝试在对象上调用该方法,无论接口是否可以。< / p>