为什么一个方法可以在 VBA 中成功工作,即使它没有列在特定类下的对象库中?



在VBA我有微软的HTML添加引用。我将变量声明为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

这里有许多事情需要理解。

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

正如Paulo Madeira在评论中指出的那样,VBA能够进行后期绑定(请参阅文档中接口、类、后期和早期绑定的概述),因此无论接口是否允许,它都会尝试调用对象上的方法。

最新更新