在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
答案 0 :(得分:-1)
这里有很多事情要理解。
el
不是接口IHTMLElement
的实例,它是实现IHTMLElement
接口的类Element的实例。类可以实现多个接口。 Element
类可能继承自另一个类,它可以实现其他几个接口,其中一个类/接口具有方法getElementsByClassName
正如Paulo Madeira在评论中指出的那样,VBA能够进行后期绑定(请参阅overview of Interfaces, Classes, late an early binding的文档),因此它会尝试在对象上调用该方法,无论接口是否可以。< / p>