Ho l'impressione che un oggetto DEVE supportare tutti i metodi / proprietà dopo essere stato inizializzato altrimenti il programma creerà un errore. Tuttavia, se vedi sotto, sto definendo 2 variabili (doc ed el) come htmldocuments. Quindi qualsiasi oggetto assegnato a queste variabili deve in teoria supportare tutti i metodi / proprietà htmldocument, altrimenti verrà generato un errore. In questo scenario, doc è la variabile di controllo ed el è la variabile di test. "doc" è impostato su un oggetto documento, che può ovviamente supportare tutti i metodi di interfaccia htmldocument. "el" è impostato su un singolo htmlparagraphelement, che NON PU support supportare tutti i metodi di interfaccia htmldocument. Tuttavia, non si verifica alcun errore. Nella riga successiva, eseguo il test del metodo dell'interfaccia htmldocument chiamato "createRange" su entrambe le variabili. Funziona bene (come previsto) con la variabile doc. Viene generato un errore con la variabile el che dice "L'oggetto non supporta questo metodo". Anche questo è previsto, ma quello che non capisco è che sono arrivato così lontano in primo luogo. Non dovrebbe essere stato generato un errore quando l'oggetto è stato inizializzato?
VBA:
'Turn on references to Microsoft Internet Controls
'and Microsoft HTML Object Libraries before running
Sub qstn()
Dim IE As New InternetExplorer
'Note that both doc and el are declared within the HTMLdocument interface
Dim doc As HTMLDocument, el As HTMLDocument
IE.navigate "https://www.youtube.com/"
IE.Visible = True
Do Until IE.ReadyState = 4: Loop
'No error expected here. Document object is returned
'which has all properties and methods of HTMLDocument interface
Set doc = IE.Document
'Why am I not getting a type mismatch here?
'I should not be allowed to go any further on this line
Set el = IE.Document.getElementsByTagName("p")(0)
'Random method to prove that the actual document object can execute this method
doc.createRange
'Same method used on the object that was also declared as HTMLdocument,
'but was set as an htmlparagraphelement. This will not working
'because the htmlparagraphelement doesn't support it
el.createRange
End Sub