2016-03-17 59 views
0

我正在構建一個從網頁中檢索表格元素的函數。到目前爲止,這很好。Excel中的VBA:如何用變量替換命令?

爲了使該功能更通用,我希望能夠使用參數告訴它要查找什麼。

我當前的代碼使用寫入發現進入細胞中的值:

Sub RetrieveWebPage Parameter 

... some code here 

    rng.Value = cl.innerHTML 

... some code here 
End Sub 

我怎麼能取代「的innerHTML」帶有可變參數,以便它檢索並不總是innerHTML的元素,但可能是outerHTML,或標題等?

我想這

rng.Value = cl.Parameter 

,但只得到該對象不支持此屬性或方法錯誤。有沒有辦法做到這一點?

謝謝。

回答

0
Dim P As String 
P = "innerHTML" 

rng.Value = CallByName(cl, P, vbGet) 
+0

太棒了,那就是我一直在尋找的東西:)非常感謝 – Matth

1

喜歡的東西:

Sub RetrieveWebPage (Parameter as String) 
'... some code here 
Select Case Parameter 
    Case "Inner" 
     rng.Value = cl.innerHTML 
    Case "Outer" 
     rng.Value = cl.outerHTML 
    Case "Title" 
     rng.Value = cl.Title 
    Case Else 
     MsgBox "Call the programmer and suggest adding error-handling to this routine or using a class" 
End Select 
'... some code here 
End Sub 
+0

編輯處理,有點與貓鼬36分。 –

+0

非常感謝。我正在考慮這樣的事情,儘管我現在用Tim Williams解決方案,因爲這正是我正在尋找的。我相信雖然,你的版本可能是更穩定和「乾淨」版本使用 – Matth

1

所有應有的尊重@Doug,但我更喜歡使用布爾變量這樣的事情。主要是因爲布爾變量只能是False或True(聲明時默認爲false)。這樣做的好處是,您不必擔心無意中將拼錯的String作爲參數輸入大量代碼時可能發生的參數。

另外使用布爾變量可以減少代碼(儘管不會太多),例如,

Sub RetrieveWebPage(Inner as Boolean) 
'... some code here 
If Inner = True then 
    rng.Value = cl.innerHTML 
Else 
    rng.Value = cl.outerHTML 
End if 
'... some code here 
End Sub 

字符串參數更有用的情況是當有多於2個結果需要分別處理時。只是我的兩分錢! :)

+0

感謝尊重:-)。我同意你的一般觀點。然而,OP確實涉及可能的第三選擇,即「標題」。我會修改我的答案,使其更清楚。 –

+0

謝謝。我明白拼錯的字符串,儘管這會將可能的值限制爲兩個,不是嗎?正如我寫的,我可能不只有兩個值,我可能會傳遞。 爲簡單起見,我現在確實使用Tim Williams解決方案。 – Matth