2017-03-28 27 views
4

我做一些互聯網從VBA搜索,並在一個點上我有哪裏currPage被聲明爲HTMLDocument如何暗淡getElementsBy *結果

Set valueResult = currPage.getElementById("rg_s").getElementsByTagName("IMG") 

,我想知道如何DimvalueResult實現:

  1. 智能感知(VBA的自動完成)導致
  2. 更好的執行時間(通過使用特定的,而不是默認Variant型)

當我看到本地窗口,有人告訴我Set給它 DispHTMLElementCollection類型,但是這不是一個選項,當我Dim 。我已經readgetElementsBy*實際上返回一個Node List而不是一個數組,所以我一直試圖遵循該途徑,但無法找到任何具體的VBA。

那麼我該如何申報呢? - 目前我剛剛得到了Dim valueResult As Object,但這並不比Variant好,並且不提供智能感知提示。

NB。我有微軟HTML對象庫勾選

+0

不'HTMLDivElement'工作? – CallumDA

+0

在即時窗口中使用'TypeName',當遇到這種困難時,本地窗口也非常有用。 –

回答

2

它應該是一個IHTMLElementCollection類型。

Dim valueResult As IHTMLElementCollection 

'// your code here 

Set valueResult = currPage.getElementById("rg_s").getElementsByTagName("IMG") 

getElementsByTagName()方法將返回一個Collection因爲潛在地存在多個匹配。該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 
1
  • 最重要的是添加引用:
    • Microsoft Internet控制(SHDOCVW)
    • Microsoft HTML對象庫

早期後期綁定都有其優點和缺點,但如果你想擁有智能感知的支持,然後鍵入庫將是必要的參考。聲明爲Object時,不會出現任何智能感知,因爲在設計時Visual Basic運行時無法知道該變量將包含什麼樣的引用。這將在運行時首先被知道。

enter image description here

然後,代碼:

Set IE = CreateObject("InternetExplorer.Application") 

可通過代碼來替換:

Dim IE As SHDocVw.InternetExplorer 
Set IE = New SHDocVw.InternetExplorer 

在不參考Microsoft HTML Object Library聲明等Dim col As IHTMLElementCollection不會編譯

然後Object Browser是你的朋友:

enter image description here

enter image description here

+1

'如果沒有這個引用像昏暗的山坳作爲申報將IHTMLElementCollection不compile.' - 你_only_需要的HTML對象庫對於編譯,不需要互聯網的控制。在現場環境中,對於諸如IE自動化之類的事物使用後期綁定實際上更好。 –

+1

+1供參考對象瀏覽器。在我的問題中,這個答案中的大多數步驟都覆蓋了一個範圍,但是我很欣賞,如果將來我有同樣的問題,那麼對象瀏覽器可以提供答案。 @MacroMan我很感興趣,你是什麼意思的術語*'晚綁定'*? – Greedo

+2

@Greedo當你使用'CreateObject(「InternetExplorer.Application」)'你是_late_綁定。這意味着你正在創建對象,而沒有事先設置對它的庫的引用。如果你使用Dim IE作爲新的InternetExplorer,那麼你有一個對該庫的引用集,這被稱爲_early_ binding。 [更多信息在這裏](http://excelmatters.com/2013/09/23/vba-references-and-early-binding-vs-late-binding/) –